列表搜索中的通配符
Globbing in list search
鉴于此列表:
aa = ['a.b.*', 'a.b.x', '*']
我希望 a.b.c
使用 globbing 来匹配 aa[0]
和 aa[2]
。
glob
和 fnmatch
似乎期望文件名路径来完成这项工作。
是否有任何东西可以为任意字符串搜索实现 globbing?
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 模式匹配给定字符串,请使用 any()
function:
>>> teststring = 'a.b.c'
>>> any(fnmatch(teststring, p) for p in aa)
True
鉴于此列表:
aa = ['a.b.*', 'a.b.x', '*']
我希望 a.b.c
使用 globbing 来匹配 aa[0]
和 aa[2]
。
glob
和 fnmatch
似乎期望文件名路径来完成这项工作。
是否有任何东西可以为任意字符串搜索实现 globbing?
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 模式匹配给定字符串,请使用 any()
function:
>>> teststring = 'a.b.c'
>>> any(fnmatch(teststring, p) for p in aa)
True