python正则表达式连续排列

时间:2012-12-31 12:17:11

标签: python regex

我正在尝试检查一个字符串,其中连续使用了最多3个数字:

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

但是这不起作用,例如字符串1234将被此正则表达式接受,即使数字字符串长度超过3。

4 个答案:

答案 0 :(得分: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!

答案 1 :(得分:0)

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

如果您希望排除4个或更多的游戏,请尝试类似(?:^|\D)\d{1,3}(?:\D|$)的内容,当然,如果您想捕获匹配项,请使用\d{1,3}周围的捕获括号。

答案 2 :(得分: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}之前或之后有任何内容的任何内容。

答案 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

所以,接下来你只需要用'if'来判断数字位数。