如何用Python的fnmatch匹配特定后缀的Unix Shell风格字符串?
解决fnmatch匹配特定后缀字符串的问题
问题原因
你用的0.1{.,test,alpha}这类大括号扩展语法是Bash等Shell的特性,但Python的fnmatch模块不支持该语法——它会把{、}当作普通字符处理,所以无法匹配你预期的字符串。
解决方案
方案1:用多个fnmatch模式做逻辑或
直接列出所有符合要求的目标字符串模式,通过any()判断是否匹配任意一个:
import fnmatch def check_match(value): target_patterns = ['0.1.', '0.1test', '0.1alpha'] return any(fnmatch.fnmatch(value, pattern) for pattern in target_patterns) # 测试示例 test_values = ['0.1test', '0.1alpha', '0.1beta', '0-1alpha', '0.1.'] for v in test_values: print(f'{v}: SUCCESS' if check_match(v) else f'{v}: FAILURE')
方案2:直接使用正则表达式(更灵活)
因为需求是字符串必须严格以0.1开头,且后续只能是.、test或alpha(无其他多余字符),可以直接用正则表达式精准匹配:
import re match_pattern = r'^0\.1(\.|test|alpha)$' test_values = ['0.1test', '0.1alpha', '0.1beta', '0-1alpha', '0.1.'] for v in test_values: print(f'{v}: SUCCESS' if re.match(match_pattern, v) else f'{v}: FAILURE')
测试结果
运行上述代码会输出:
0.1test: SUCCESS 0.1alpha: SUCCESS 0.1beta: FAILURE 0-1alpha: FAILURE 0.1.: SUCCESS
完全符合你的预期要求。
内容的提问来源于stack exchange,提问作者kingJulian
相关产品推荐
相关产品推荐

