麻烦理解正则表达式,python

时间:2014-02-17 14:35:53

标签: python regex

我对python中的re模块很新,但一直在尝试编写正则表达式来获取文件的版本号。在大多数情况下,此代码段似乎有效:

test = "filename.ver3_576.exr"
print(re.search("(?!(v|ver|version|vers))\d+", test.lower()).group())

但如果我稍微改变测试字符串,它就不会给我我期望的结果:

test2 = "filename.ver_3_576.exr" # expects None, because of the underscore, gets 3
test3 = "filenameVe2_version201_1001.exr" # expects 201, gets2, "ve"(exactly) is not something I want to search for

我显然在这里做错了什么,但很难确定可能是什么。

任何帮助都会非常感激,欢呼声

1 个答案:

答案 0 :(得分:2)

re.search('(version|vers|ver|v)(\d+)', test.lower()).group(2)

要回答您的评论,您没有使用lookbehind表达式。这是一个负面的前瞻性表达。您使用的表达式与'\d+'相同(不太容易解释原因)。

在这种情况下使用正面的后视镜并不容易,因为它需要固定宽度的图案。例如,以下内容将引发错误:'(?<=(version|vers|ver|v))\d+',因此我建议您使用我发布的重新设置,因为它是最直接的前进。