2014-03-14 43 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 *',所以它也允许*一位整数* –