我正在尝试使用
re.findall(pattern, string)
来匹配所有数字,但字符串中有许多重复项。例如。 "1222344"
匹配 "1", "222", "3", "44"
。但我似乎找不到这样做的模式。
我尝试使用模式
"(\d)\1+"
匹配数字 1 次或多次,但它似乎不起作用。但是当我打印结果时,它显示为一个空数组[]
。
您走在正确的轨道上,但您的模式
(\d)\1+
实际上匹配 two 或更多连续数字(first 数字与 \d 匹配,然后 +
量词表示匹配 one 或更多)所以你想要的是 (\d)\1*
,其中 *
表示匹配 零 或更多前一个数字。
另一件可能令人困惑的是,
re.findall()
仅返回匹配的子表达式(在本例中为单个数字)的列表,以查看匹配的整个字符串,您可以使用re.search()
或re.finditer()
来获取匹配对象然后使用mo.group(0)
访问整个匹配的字符串
重新导入
text = "122333444455555666666"
patt = re.compile(r"(\d)\1*")
print()
print(patt.findall(text)) # print list of JUST first digit in each run
print()
for mo in patt.finditer(text): # iterate over all the Match Objects
print(mo.group(0)) # group(0) is the entire matched string
输出是:
['1', '2', '3', '4', '5', '6']
1
22
333
4444
55555
666666