0

鉴于此列表:

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

我想a.b.c匹配aa[0]aa[2]使用通配符。

glob并且fnmatch似乎期望文件名路径来完成这项工作。

有什么东西可以实现任意字符串搜索的通配符吗?

4

1 回答 1

2

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

>>> 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

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

如果要测试是否有任何模式与给定字符串匹配,请使用any()函数

>>> teststring = 'a.b.c'
>>> any(fnmatch(teststring, p) for p in aa)
True
于 2018-05-13T12:54:24.313 回答