正则表达式匹配字符串中的数字范围表示整数?

时间:2012-09-27 11:14:23

标签: python regex

我想只匹配代表0...9999之间数字的字符串

import re
NUMERIC  = re.compile("\d{,4}")
NUMERIC.match("324234")
nr =NUMERIC.match("324234")
nr.group(0)

尝试上述但它匹配字符串中的前4位数,即使该字符串有5位数。

正则表达式匹配整数的字符串表示中1到4位数之间的数字?

2 个答案:

答案 0 :(得分:2)

^是行的开头 $是行尾

你可能想要单词......不是整行......所以

\< = start of word 
\> = end of word
\b is word boundry...

\&LT;和&gt;许多语言都不支持...

所以

\b(\d{1,4})\b

然而,这将匹配22.33作为两个单独的比赛。

你可以通过做这样的事情来避免这种情况。

(?:^|\s)(\d{1,4})(?:\s|$)

但是会错过

super duper 3333,and 

所以你必须在尾随字符列表中添加“,”或其他标题......

(?:^|\s)(\d{1,4})(?:\s|$|[,:;?])

然而,这让我们回到......

有人编号为5.今天......

5会错过!你如何区分它和“有55.55%的人”

答案 1 :(得分:2)

主持人做了不太匹配的技巧:

>>> pattern = re.compile("^\d{1,4}$")
>>> pattern.match("0").group()
'0'
>>> pattern.match("42").group()
'42'
>>> pattern.match("777").group()
'777'
>>> pattern.match("2012").group()
'2012'
>>> pattern.match("65535").group()
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

注意{1,4} - 我假设你不想匹配空字符串。但是,这将匹配00001,这肯定在范围内。

正则表达式的一个更强大的替代方法是利用Python的内置整数解析:

def parse_4digit_number(s):
    i = int(s)
    if 0 <= i <= 9999:
        return i
    else:
        raise ValueError("{0} is out of range".format(i))