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

ast*_*irl 15 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"
Run Code Online (Sandbox Code Playgroud)

但这不起作用!例如,删除\ A和\ W将匹配v303,但也将匹配v30G

谢谢

Ste*_*oss 25

非常直截了当.首先,在您的模式上放置锚点:

"^patternhere$"
Run Code Online (Sandbox Code Playgroud)

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

"^v\d+$"
Run Code Online (Sandbox Code Playgroud)

应该这样做.


bri*_*ary 6

我想你可能想要\b(单词边界)而不是\A(字符串的开头)和\W(非单词字符),你也不需要使用lookahead(the (?=...)).

尝试:"\bv(\d+)"如果你需要捕获int,"\bv\d+"如果你不需要.

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

编辑2:由于+是"贪婪",\b因此不需要或不需要拖尾.