我想只匹配代表0...9999
之间数字的字符串
import re
NUMERIC = re.compile("\d{,4}")
NUMERIC.match("324234")
nr =NUMERIC.match("324234")
nr.group(0)
尝试上述但它匹配字符串中的前4位数,即使该字符串有5位数。
正则表达式匹配整数的字符串表示中1到4位数之间的数字?
答案 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))