簡體   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