Skip to main content
 首页 » 编程设计

python之难以理解正则表达式,python

2024年11月01日30java哥

我对 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 

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

任何帮助将不胜感激,干杯

请您参考如下方法:

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

为了回答您的评论,您没有使用回顾表达式。这是一个否定的前瞻表达式。您使用的表达式与 '\d+' 相同(不是那么容易解释为什么)。

在这种情况下使用正向后视 re 并不容易,因为它需要固定宽度的模式。例如,以下 re 将引发错误:'(?<=(version|vers|ver|v))\d+' ,所以我建议您使用我发布的 re,因为它是最直接的。