re.match与Path.match的区别及路径后缀正则匹配失败问题咨询
问题解决方案
re模块实现方法
你遇到的问题根源是re.match要求从字符串首字符开始匹配,你的正则匹配的是末尾的.png,自然全部返回None,有两种修改方式:
- 方式1:替换为
re.search(),该方法会扫描整个字符串,只要存在符合规则的子串就会返回匹配对象,不需要修改原有正则:
import re import pathlib l = ["C:/dir/1.png", "C:/dir/a2.png", "C:/dir/2a.png", "C:/dir/a.txt", "C:/dir/x4-444.exe"] pat = re.compile(r"\.png$") for p in l: print("re.search", re.search(pat, p) is not None) # 输出 True True True False False
- 方式2:保留
re.match(),修改正则表达式,在开头添加.*匹配任意长度的前缀字符:
pat = re.compile(r".*\.png$") for p in l: print("re.match", re.match(pat, p) is not None) # 输出 True True True False False
方案选择建议
当前场景直接用Path.match更合适:
- 语法简洁,不需要记忆正则规则,
*.png的写法符合文件匹配的通用习惯 - 自动兼容不同操作系统的路径分隔符差异,跨平台运行不需要额外适配
- 代码语义明确,其他维护者可以快速理解你是在做路径后缀匹配
只有当匹配规则非常复杂(比如需要匹配文件名中的特定字符组合、长度限制等glob语法无法实现的规则)时,再选择使用re模块实现。
内容的提问来源于stack exchange,提问作者AdvMaple
相关产品推荐
相关产品推荐

