Python中的正则表达式:无法匹配重复的组号

时间:2018-12-05 14:04:06

标签: python regex

我使用正则表达式检测Python字符串中从“ 0”到“ 999 999 999”的数字。

import re

test_string = "b\'[<span id=\"prl\">114 893</span>]\'"

working_pattern = "\d{1,3}\s\d{3}"
non_working_pattern = "\d{1,3}(\s\d{3}){0,2}"

wk_ptrn = re.findall(working_pattern, test_string)
non_wk_ptrn = re.findall(non_working_pattern, test_string)

print(wk_ptrn)
print(non_wk_ptrn)

结果是:

print(wk_ptrn)显示:['114 893']
print(non_wk_ptrn)显示:[' 893'](第一个数字前有一个空格)

non_working_pattern是"\d{1,3}(\s\d{3}){0,2}"

\d{1,3} :

检测1到3位数字[0到999]

\s\d{3} : 

检测到任何空格后跟3个数字[“ 000”至“ 999”]

{0,2} : 

是一个量词,因此我可以检测到"0" (quantifier = 0)"999[ 999][ 999]" (quantifier = 2)

我不明白为什么"\d{1,3}(\s\d{3}){0,2}“不起作用。
您能帮我找出错误吗?

谢谢。问候。

1 个答案:

答案 0 :(得分:0)

您快到了,但是您应该按以下步骤进行更改:

pattern = "\d{1,3}(?:\s\d{3}){0,2}"

?:使组不被捕获,因此findall将返回整个匹配项,而不仅仅是组。如链接文档所述:

  

如果模式中存在一个或多个组,则返回组列表