将重复字符的字符串拆分成列表

23 投票
4 回答
9299 浏览
提问于 2025-04-18 01:29

我对正则表达式(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']

撰写回答