繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM