我对Regex没有太多经验,但我一直在阅读很多相关内容。假设有一个字符串s = '111234'
我想要一个字符串拆分为L = ['111', '2', '3', '4']
的列表。我的方法是让一个小组检查它是否是一个数字,然后检查该组的重复。像这样的东西
L = re.findall('\d[\1+]', s)
我认为\d[\1+]
基本上会检查“数字”或“数字+”相同的重复次数。我想这可能会做我想要的。有人可以帮忙吗?
答案 0 :(得分:15)
>>> s='111234'
>>> [m.group(0) for m in re.finditer(r"(\d)\1*", s)]
['111', '2', '3', '4']
答案 1 :(得分:14)
如果您想对所有重复的字符进行分组,那么您也可以使用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']
答案 2 :(得分:7)
试试这个:
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']