如何用Python正则匹配独立的/home开头、mdl/res结尾的路径
解决正则匹配独立路径的问题
问题原因
你当前的正则/home.+(mdl|res)存在三个核心问题:
.+是贪婪匹配,会从第一个/home开始,一直匹配到字符串最后一个res,导致两个路径被合并成一个匹配项。.会匹配包括空格在内的任意字符,无法限制在单个独立路径内。re.findall默认返回正则中捕获分组的内容,而非整个匹配字符串,所以最终只输出了后缀res。
解决方法
使用以下正则表达式,实现独立匹配目标路径:
import re target_str = "~/goofy.git$ /home/maria/L1-07-51.mdl /home/maria/L1-08-09.res" matches = re.findall(r"/home\S+\.(?:mdl|res)", target_str) print(matches)
输出结果:
['/home/maria/L1-07-51.mdl', '/home/maria/L1-08-09.res']
正则规则说明
/home:匹配路径的固定前缀\S+:匹配一个或多个非空白字符,确保只匹配单个路径(不会跨空格)\.:转义后的点号,匹配文件名中的后缀分隔符(?:mdl|res):非捕获分组,匹配mdl或res后缀,避免re.findall只返回后缀内容
内容的提问来源于stack exchange,提问作者Mikke Mus
相关产品推荐
相关产品推荐

