我使用正则表达式检测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}
“不起作用。
您能帮我找出错误吗?
谢谢。问候。
答案 0 :(得分:0)
您快到了,但是您应该按以下步骤进行更改:
pattern = "\d{1,3}(?:\s\d{3}){0,2}"
?:
使组不被捕获,因此findall
将返回整个匹配项,而不仅仅是组。如链接文档所述:
如果模式中存在一个或多个组,则返回组列表