Python字符串比较不符合预期:通配符匹配失效问题求助
问题原因分析
Python中的==运算符是严格的字面字符串匹配,它不会识别你写的*、[1-7]这类通配符语法。当你执行"LC08_L1TP_215068_20151114_20170402_01_T1_B1" == "LC08*_B[1-7]"时,Python只是在对比两个字符串的每一个字符是否完全一致——右边的*和[1-7]会被当作普通字符处理,自然和左边的具体文件名不匹配,所以返回False。
两种解决方法
方法1:使用fnmatch模块(推荐用于简单通配符场景)
Python标准库中的fnmatch模块专门用来处理类shell的通配符匹配,完全符合你的需求:
import fnmatch filename = "LC08_L1TP_215068_20151114_20170402_01_T1_B1" pattern = "LC08*_B[1-7]" # 检查文件名是否匹配通配符模式 is_match = fnmatch.fnmatch(filename, pattern) print(is_match) # 输出: True
fnmatch支持的通配符规则:
*:匹配任意长度的任意字符(包括空字符)[1-7]:匹配1到7之间的单个字符?:匹配单个任意字符
方法2:使用正则表达式(适合复杂匹配场景)
如果你的匹配需求更复杂,也可以用Python的re正则模块,注意要把通配符转换成对应的正则语法:
import re filename = "LC08_L1TP_215068_20151114_20170402_01_T1_B1" # 正则中用.*代替通配符的*,[1-7]的含义和通配符一致 pattern = r"LC08.*_B[1-7]" # fullmatch检查整个字符串是否完全匹配模式 is_match = re.fullmatch(pattern, filename) is not None print(is_match) # 输出: True
内容的提问来源于stack exchange,提问作者dogosousa
相关产品推荐
相关产品推荐

