2012-12-31 115 views
-3

我试图检查最多3个数字的字符串在我使用的一排:蟒蛇正则表达式数字

regex = re.compile("\d{0,3}") 

但这并不比如字符串1234会工作被这个正则表达式接受,即使长度为3的数字字符串也是如此。

+3

什么不行?你的输入是什么,你得到了什么输出? –

+0

我试图通过回答你的问题来帮助你,我已经删除了我的答案和所有评论。原因是你的问题很不清楚,你发布的内容有很多错误,并回答他们,并为你的答案提供直接解决方案,我对你如何告诉我这是错误的感到震惊。你是对的,我回答你发布的问题是错误的,而不是你没有发布的代码问题。在未来,我建议你提供更多的信息,以减少那些试图帮助你的人的挫败感。 –

+0

@InbarRose如果问题如此不清楚,那么你不应该回答,甚至更糟糕的是,你发表了对其他人的评论,说他们错了(当他们确实是正确的时候),现在你对OP告诉你“很震惊”你不正确的答案不是他正在寻找的!?!? –

回答

1

如果你想在字符串中检查最多3位数的字符串,你需要使用'\d{4,}',因为你只对数字字符串感兴趣长度为3.

import re 

str='123abc1234def12' 
print re.findall('\d{4,}',str) 

>>> '[1234]' 

如果使用{0,3}

str='123456' 
print re.findall('\d{0,3}',str) 

>>> ['123', '456', ''] 

regex匹配最大长度3和空字符串的数字串,但这不能用来测试的正确性。在这里你不能检查所有的数字字符串是否在长度上,但你可以很容易地检查长度上的数字字符串。

所以测试做这样的事情:

str='1234' 

if re.match('\d{4,}',str): 
    print 'Max digit string too long!' 

>>> Max digit string too long! 
+0

为什么4?我希望'{1,3}'符合要求;四个肯定超过“最多三个”。 – tripleee

+0

@tripleee'OP'正在尝试验证字符串,只允许在一行中最多3个,所以您需要检查'4 +'以查找字符串是否正确。 –

+0

其实我也不会检查4+数字串在一排,所以如果字符串中包含0,1,2或3个数字在一排的很好,但是当它含有4+号码,然后不精 – wasp256

0

\d{0}相匹配的所有可能的字符串。目前尚不清楚“不起作用”是什么意思,但如果您希望将数字与字符串匹配,请将重复运算符增加到{1,3}

如果你想排除的4个或更多的运行,你可以试试(?:^|\D)\d{1,3}(?:\D|$),当然,如果你想捕捉的比赛中,使用捕捉周围\d{1,3}括号。

0

可能有几个原因:既然你想\d搜索数字或数字

  • ,你应该拼写为"\\d"r"\d""\d"可能正常工作,但只是因为d在字符串中不是特殊的(尚未)。 "\n""\f""\r"会做一些完全不同的事情。检查re module documentation并搜索“原始字符串”。

  • "\\d{0,3}"将匹配任何事情,因为{0,3}的意思是“零涨幅高达三”。所以,它会匹配任何字符串的开始,因为任何字符串都以空字符串开头。

  • 或者,也许你想会寻找那些只有零到三个数字,而不是其他的字符串。在这种情况下,您想使用r"^\d{0,3}$"之类的东西。原因是正则表达式匹配字符串中的任何位置(或者只在开始时使用re.match而不使用re.search)。 ^字符串的开头匹配,并通过$把那些你不符合任何之前或之后\d{0,3}有任何两端的端匹配,所以。

0

您使用的方法是找到0-3数字的子字符串,它不能达到你的扩展。 我解决:

>>> import re 
>>> re.findall('\d','ds1hg2jh4jh5') 
['1', '2', '4', '5'] 
>>> res = re.findall('\d','ds1hg2jh4jh5') 
>>> len(res) 
4 
>>> res = re.findall('\d','23425') 
>>> len(res) 
5 

因此,未来你只需要使用“如果”来判断数字的号码。