Python中的Regex:无法匹配重复的组号

2024-09-27 19:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用regex在Python中检测字符串中从“0”到“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'](第一个数字前有空格)

非工作模式是"\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}“不起作用。
你能帮我找出错误吗?你知道吗

谢谢你。当做。你知道吗


Tags: testrestring数字regexworkingpatternspan
1条回答
网友
1楼 · 发布于 2024-09-27 19:22:55

你就快到了,但你应该改变它如下:

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

?:使组不被捕获,这样^{}将返回整个匹配项,而不仅仅是组。如链接文件所述:

If one or more groups are present in the pattern, return a list of groups

相关问题 更多 >

    热门问题