将重复字符的字符串拆分成列表
我对正则表达式(Regex)不是很熟悉,但我一直在学习。假设有一个字符串 s = '111234'
,我想把这个字符串分割成一个列表 L = ['111', '2', '3', '4']
。我的想法是先检查每个字符是不是数字,然后再看看这些数字是否有重复。大概是这样的:
L = re.findall('\d[\1+]', s)
我觉得 \d[\1+]
这个写法基本上是检查“数字”或者“数字+”的重复。这样可能就能实现我想要的效果。
4 个回答
0
如果你不想使用任何库的话,这里有一段代码:
s = "AACBCAAB"
L = []
temp = s[0]
for i in range(1,len(s)):
if s[i] == s[i-1]:
temp += s[i]
else:
L.append(temp)
temp = s[i]
if i == len(s)-1:
L.append(temp)
print(L)
输出结果:
['AA', 'C', 'B', 'C', 'AA', 'B']
8
试试这个:
s = '111234'
l = re.findall(r'((.)\2*)', s)
## it this stage i have [('111', '1'), ('2', '2'), ('3', '3'), ('4', '4')] in l
## now I am keeping only the first value from the tuple of each list
lst = [x[0] for x in l]
print lst
输出结果:
['111', '2', '3', '4']
20
如果你想把所有重复的字符分组,可以使用itertools.groupby
,像这样
from itertools import groupby
print ["".join(grp) for num, grp in groupby('111234')]
# ['111', '2', '3', '4']
如果你只想要数字的话,可以这样做
print ["".join(grp) for num, grp in groupby('111aaa234') if num.isdigit()]
# ['111', '2', '3', '4']
25
使用 re.finditer()
方法:
>>> s='111234'
>>> [m.group(0) for m in re.finditer(r"(\d)\1*", s)]
['111', '2', '3', '4']