用于int的Python正则表达式至少有4位数

时间:2013-05-02 22:09:32

标签: python regex int match

我正在学习正则表达式,我在这里有点困惑。我有一个字符串,我想从中提取一个至少有4位数字且最多7位数的int。我尝试了如下:

>>> import re
>>> teststring = 'abcd123efg123456'
>>> re.match(r"[0-9]{4,7}$", teststring)

我期待123456,不幸的是,这根本没有任何结果。有人可以帮我一点吗?

3 个答案:

答案 0 :(得分:12)

@ExplosionPills是正确的,但你的正则表达式仍然存在两个问题。

首先,$匹配字符串的 end 。我猜你也希望能够在字符串中间提取一个int,例如 abcd123456efg789以返回123456。要解决这个问题,你需要这个:

r"[0-9]{4,7}(?![0-9])"
            ^^^^^^^^^

添加的部分是否定先行断言,意思是“......后面没有更多的数字。”让我通过使用\d来简化它:

r"\d{4,7}(?!\d)"

那更好。现在,第二个问题。你的正则表达式的左侧没有约束,所以给定abcd123efg123456789之类的字符串,你实际上匹配3456789。所以,你还需要一个负面的lookbehind断言

r"(?<!\d)\d{4,7}(?!\d)"

答案 1 :(得分:8)

.match仅在字符串与模式启动时匹配。使用.search

答案 2 :(得分:2)

您也可以使用:

re.findall(r"[0-9]{4,7}", teststring)

在您的情况下,会返回与您的正则表达式匹配的所有子字符串的列表[&#39; 123456&#39;]

如果您只对第一个匹配的子字符串感兴趣,那么您可以将其写为:

next(iter(re.findall(r"[0-9]{4,7}", teststring)), None)