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

为何在re.search中使用多段通配符序列无法生效?

问题原因

你用的*是shell风格的通配符(表示任意字符),但re.search依赖正则表达式语法,正则里的*是修饰前序字符的量词(匹配前序字符0次或多次),并非任意字符通配符,直接使用会导致匹配失效。另外原模式里的.在正则中是匹配任意单个字符的特殊符号,你需要匹配实际的点,必须转义成\.。

两种解决方法

方法一:将shell通配符转为正则表达式

把*替换成正则中的.*(匹配任意字符0次或多次),同时转义原字符串里的.,修正后的代码如下:

import re
# 转换后的正则模式
pattern = '2A-CS-.*\.GPM\.DPR\.V.*'
file = '/home/files/2A-CS-WFF.GPM.DPR.V9-20240130.20240707-S220512-E220609.058829.V07C.HDF5'
print(re.search(pattern, file))  # 现在会返回匹配对象

方法二:用fnmatch模块(更简便)

如果只是需要类shell的通配符匹配,不需要正则的复杂逻辑,直接用Python内置的fnmatch模块更省心,它原生支持*这类shell通配符:

import fnmatch
pattern = '2A-CS-*.GPM.DPR.V*'
file = '/home/files/2A-CS-WFF.GPM.DPR.V9-20240130.20240707-S220512-E220609.058829.V07C.HDF5'
print(fnmatch.fnmatch(file, pattern))  # 返回True,表示匹配成功

内容的提问来源于stack exchange,提问作者Charanjit Pabla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:40:55