[英]Regex in Python : not able to match repeated group numbers
我使用正则表达式来检测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}
”不起作用。
你能帮我弄清楚这个错误吗?
谢谢。 问候。
你几乎就在那里,但你应该改变如下:
pattern = "\d{1,3}(?:\s\d{3}){0,2}"
?:
使组不捕获,以便findall
将返回整个匹配,而不仅仅是组。 如链接文档所述:
如果模式中存在一个或多个组,则返回组列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.