Python 用 Shell 通配符匹配字符串
- Python
- 2017-09-20
- 126热度
- 0评论
Python 有一种介于普通字符串方法和正则表达式之间的字符串匹配方式——用 Shell 通配符匹配。
fnmatch
模块提供了两个函数—— fnmatch()
和 fnmatchcase()
,可以用来实现这样的匹配。这两个函数的区别在于:
fnmatch()
大小写敏感性依赖于当前操作系统fnmatchcase()
大小写敏感
使用范例:
In [1]: from fnmatch import fnmatch
In [2]: fnmatch('foo.txt', '*.txt')
Out[2]: True
In [3]: fnmatch('foo.txt', '?oo.txt')
Out[3]: True
In [4]: fnmatch('Dat45.csv', 'Dat[0-9]*')
Out[4]: True
In [5]: names = ['Dat1.csv', 'Dat2.csv', 'config.ini', 'foo.py']
In [6]: [name for name in names if fnmatch(name, 'Dat*.csv')]
Out[6]: ['Dat1.csv', 'Dat2.csv']
附:常用 Shell 通配符
字符 | 含义 | 实例 |
* | 匹配 0 或多个字符 | a*b a与b之间可以有任意长度的任意字符,也可以一个也没有,如 aabcb,axyzb,a012b,ab。 |
? | 匹配任意一个字符 | a?b a与b之间必须也只能有一个字符,可以是任意字符,如 aab,abb,acb,a0b。 |
[list] | 匹配 list 中的任意单一字符 | a[xyz]b a与b之间必须也只能有一个字符,且只能是 x 或 y 或 z,如:axb,ayb,azb。 |
[!list] | 匹配除 list 中的任意单一字符 | a[!0-9]b a与b之间必须也只能有一个字符,但不能是阿拉伯数字,如 axb,aab,a-b。 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] | a[0-9]b 0与9之间必须也只能有一个字符,如 a0b,a1b……a9b。 |
{string1,string2,...} | 匹配 sring1 或 string2 (或更多)其一字符串 | a{abc,xyz,123}b a与b之间只能是 abc 或 xyz 或 123 这三个字符串之一。 |