我正在尝试编写一个正则表达式,将完整路径文件名转换为给定文件类型的短文件名,减去文件扩展名。
例如,我尝试使用以下方法从字符串中获取 .bar 文件的名称
re.search('/(.*?)\.bar$', '/def_params/param_1M56/param/foo.bar')
根据 Python 重新文档,*? 是 * 的非贪婪版本,所以我期待得到
'foo'
返回 match.group(1) 但我得到了
'def_params/param_1M56/param/foo'
关于贪婪,我在这里遗漏了什么?
请您参考如下方法:
你所缺少的与其说是贪婪,不如说是正则表达式引擎:它们从左到右工作,所以 / 尽可能早地匹配,而 .* ? 然后被迫从那里工作。在这种情况下,最好的正则表达式根本不涉及贪婪(你需要回溯才能工作;它会,但如果有很多斜线,可能需要很长时间才能运行),但更明确的模式:
'/([^/]*)\.bar$'
