在Python正则中使用锚点以获取精确匹配

15 投票
3 回答
29456 浏览
提问于 2025-04-17 04:54

我需要验证一个版本号,它的格式是以字母 'v' 开头,后面跟着一个正整数,不能有其他任何东西。比如 "v4" 或 "v1004"。

我有了

import re
pattern = "\Av(?=\d+)\W"

m = re.match(pattern, "v303")
if m is None:
    print "noMatch"
else:
    print "match"

但是这个不管用!如果我去掉 \A 和 \W,虽然可以匹配到 v303,但也会匹配到 v30G 这样的格式。

谢谢!

3 个回答

3

简单来说,你可以使用

 \bv\d+\b

或者用 ^\bv\d+\b$ 把它包起来

这样就能完全匹配它了..

6

我觉得你可能想用 \b(单词边界)而不是 \A(字符串开始)和 \W(非单词字符),而且你也不需要使用前瞻((?=...))。

如果你需要捕获整数,可以试试 "\bv(\d+)",如果不需要捕获整数,可以用 "\bv\d+"

编辑: 你可能想在Python的正则表达式中使用原始字符串语法,像这样 r"\bv\d+\b",因为在普通字符串中 "\b" 是一个退格符。

编辑 2: 由于 + 是“贪婪”的,所以不需要也不想要后面的 \b

25

这很简单。首先,在你的模式上加上锚点:

"^patternhere$"

现在,我们来组合这个模式:

"^v\d+$"

这样就可以了。

撰写回答