为何在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
相关产品推荐
相关产品推荐

