在Python正则中使用锚点以获取精确匹配
我需要验证一个版本号,它的格式是以字母 '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+$"
这样就可以了。