列表搜索中的全球化

时间:2018-05-13 12:53:18

标签: python glob

鉴于此清单:

aa = ['a.b.*', 'a.b.x', '*']

我希望a.b.c使用通配符来匹配aa[0]aa[2]

globfnmatch似乎期望文件名路径可以完成这项工作。

有没有什么可以实现任意字符串搜索的globbing?

1 个答案:

答案 0 :(得分:1)

fnmatch.fnmatch() function适用于任意字符串,而不仅仅是文件名:

>>> from fnmatch import fnmatch
>>> aa = ['a.b.*', 'a.b.x', '*']
>>> fnmatch('a.b.c', aa[0])
True
>>> fnmatch('a.b.c', aa[1])
False
>>> fnmatch('a.b.c', aa[2])
True

第一个参数名为 filename ,因为glob模式样式匹配传统上用于过滤文件名。正如文档所述,文件名分隔符(POSIX系统上的/)对fnmatch()并不特殊,并且不会改变字符串的匹配方式。

如果您想测试是否存在与给定字符串匹配的任何模式,请使用any() function

>>> teststring = 'a.b.c'
>>> any(fnmatch(teststring, p) for p in aa)
True