在python正则表达式中使用锚点来获得完全匹配

时间:2011-10-24 17:46:26

标签: python regex

我需要验证由'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 个答案:

答案 0 :(得分:25)

非常简单。首先,将锚点放在您的模式上:

"^patternhere$"

现在,让我们把模式放在一起:

"^v\d+$"

应该这样做。

答案 1 :(得分:5)

我认为您可能需要\b(单词边界)而不是\A(字符串的开头)和\W(非单词字符),您也不需要使用前瞻((?=...))。

如果您需要捕获int "\bv(\d+)",请尝试:"\bv\d+"

编辑:您可能希望对Python正则表达式r"\bv\d+\b"使用原始字符串语法,因为"\b"是常规字符串中的退格符。

修改2 :由于+是“贪婪的”,因此不需要或不需要跟踪\b

答案 2 :(得分:2)

只需使用

 \bv\d+\b

或用^\bv\d+\b$

括起来

完全匹配..