使用 re 匹配数字 + 任何连续的重复项并存储重复项,而不仅仅是数字作为结果 [重复]

问题描述 投票:0回答:1

我正在尝试使用

re.findall(pattern, string)
来匹配所有数字,但字符串中有许多重复项。例如。
"1222344"
匹配
"1", "222", "3", "44"
。但我似乎找不到这样做的模式。

我尝试使用模式

"(\d)\1+"
匹配数字 1 次或多次,但它似乎不起作用。但是当我打印结果时,它显示为一个空数组
[]

python regex string python-re
1个回答
3
投票

您走在正确的轨道上,但您的模式

(\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
© www.soinside.com 2019 - 2024. All rights reserved.