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

kra*_*r65 5 python regex int match

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

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

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

And*_*ong 13

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

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

r"[0-9]{4,7}(?![0-9])"
            ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

增加的部分是一个负面的先行断言,意思是"......后面没有更多的数字." 让我通过使用\d虽然简化:

r"\d{4,7}(?!\d)"
Run Code Online (Sandbox Code Playgroud)

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

r"(?<!\d)\d{4,7}(?!\d)"
Run Code Online (Sandbox Code Playgroud)


Exp*_*lls 8

.match只有当字符串以模式开头时才会匹配.使用.search.