You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:09:05