import re
digits = '122223444'
预期:
['1', '2222', '3','444']
答案 0 :(得分:3)
您可以使用捕获组和反向引用
(\d)\1*
import re
regex = r"(\d)\1*"
test_str = "122223444"
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
答案 1 :(得分:2)
使用以下正则表达式:
[m.group(0) for m in re.finditer(r"(\w)\1*", digits)]
示例:
import re
digits = '122223444'
print([m.group(0) for m in re.finditer(r"(\w)\1*", digits)])
# ['1', '2222', '3', '444']
您也可以执行itertools.groupby
:
from itertools import groupby
digits = '122223444'
print([''.join(g) for _, g in groupby(digits)])
# ['1', '2222', '3', '444']
答案 2 :(得分:1)
您可以分别匹配每个数字的至少一位,例如,使用0+|1+|2+|3+|4+|5+|6+|7+|8+|9+
正则表达式。
答案 3 :(得分:1)
import re
match = re.match(r"(0+)(1+)(2+)(3+)(4+)(5+)(6+)(7+)(8+)(9+)", '122223444', re.I)
if match:
items = match.groups()
答案 4 :(得分:1)
此表达式
((.)\2*)
或仅用于数字
(([0-9])\2*)
可能需要完全匹配。
import re
regex = r"((.)\2*)"
string = """
122223444
aaabbbbcddee
"""
l = []
for group in re.findall(regex, string):
l.append(group[0])
print(l)
['1', '2222', '3', '444', 'aaa', 'bbbb', 'c', 'dd', 'ee']
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。