Skip to main content
 首页 » 编程设计

python之在 python 中对正则表达式进行去贪婪处理

2025年05月04日23bluestorm

我正在尝试编写一个正则表达式,将完整路径文件名转换为给定文件类型的短文件名,减去文件扩展名。

例如,我尝试使用以下方法从字符串中获取 .bar 文件的名称

re.search('/(.*?)\.bar$', '/def_params/param_1M56/param/foo.bar') 

根据 Python 重新文档,*? 是 * 的非贪婪版本,所以我期待得到

'foo' 

返回 match.group(1) 但我得到了

'def_params/param_1M56/param/foo' 

关于贪婪,我在这里遗漏了什么?

请您参考如下方法:

你所缺少的与其说是贪婪,不如说是正则表达式引擎:它们从左到右工作,所以 / 尽可能早地匹配,而 .* ? 然后被迫从那里工作。在这种情况下,最好的正则表达式根本不涉及贪婪(你需要回溯才能工作;它会,但如果有很多斜线,可能需要很长时间才能运行),但更明确的模式:

'/([^/]*)\.bar$'