2014-03-14 210 views
0

我想使用python re來匹配這種輸入:12,13,45,23。Python正則表達式不匹配

輸入由四個非負整數組合,用「,」分隔。

但是,我重新不符......

print re.match(u'^([1−9]\d*|0),([1−9]\d*|0),([1−9]\d*|0),([1−9]\d*|0)$',u"0,1001,13,2") 
#output is None 

不過,下次再效果很好。

print re.match(u'^([1−9]\d*|0),([1−9]\d*|0),([1−9]\d*|0)$',u"0,1001,13") 
#<_sre.SRE_Match object at 0x024151B0> 

我完全困惑。

+0

嘗試'R」 (\ d +,)+''。 – IceArdor

+0

@IceArdor OP顯然不希望數字以'0'開始,除了'0'本身...並且它不能解釋結果。 – isedev

回答

0

對於這一點,你就不需要再重複每個整數匹配的正則表達式,你可以使用{x}其中x是它應該出現的次數,是這樣的:

import re 

matcher = re.compile(u"([1-9]\d*|0)(,([1-9]\d*|0)){3}$") 

print matcher.match(u"12,45") 
# None 
print matcher.match(u"0,1001,13,578") 
# <_sre.SRE_Match object at 0x7fb0e911ca48> 
+0

感謝您的建議。我仍然有一個問題,爲什麼你不使用「^」來匹配輸入的開始?如果輸入是「asdf0,12,13,24」,我認爲你的比賽結果不會是無。但是,我發現你的重新輸出「無」這種輸入。你能解釋一下嗎?非常感謝! @Ruben Bermudez – Dong

+0

檢查http://docs.python.org/2/library/re.html#re.RegexObject.match'match'從字符串的開始處開始,它是'search'選項,它有你提出的問題。 –

+0

我更新了我的答案,因爲我在我的正則表達式中發現了一個* bug *,它被寫入'\ d +',但它應該是'\ d *',所以它也允許*一位整數* –