我只想匹配代表数字之间的字符串0...9999
import re
NUMERIC = re.compile("\d{,4}")
NUMERIC.match("324234")
nr =NUMERIC.match("324234")
nr.group(0)
尝试了上述方法,但它匹配字符串中的前 4 位数字,即使字符串有 5 位数字。
正则表达式匹配此字符串表示的整数中具有 1 到 4 位数字的数字?
Anchors 可以做到不匹配太多:
>>> 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))
^ 是行首 $ 是行尾
你可能想要单词......而不是整行......所以
\< = start of word
\> = end of word
\b is word boundry...
许多语言不支持 \< 和 >...
所以
\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% 的人”之间的区别