我对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
我显然在这里做错了什么,但很难确定可能是什么。
任何帮助都会非常感激,欢呼声
答案 0 :(得分:2)
re.search('(version|vers|ver|v)(\d+)', test.lower()).group(2)
要回答您的评论,您没有使用lookbehind表达式。这是一个负面的前瞻性表达。您使用的表达式与'\d+'
相同(不太容易解释原因)。
在这种情况下使用正面的后视镜并不容易,因为它需要固定宽度的图案。例如,以下内容将引发错误:'(?<=(version|vers|ver|v))\d+'
,因此我建议您使用我发布的重新设置,因为它是最直接的前进。