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