正则表达式以按数字匹配组

时间:2019-09-23 01:46:28

标签: python regex

import re
digits = '122223444'

预期:

['1', '2222', '3','444']

5 个答案:

答案 0 :(得分:3)

您可以使用捕获组和反向引用

(\d)\1*

enter image description here

Regex Demo | Python demo


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中查看它如何与某些示例输入匹配。