字符串匹配之fnmatch模块
fnmatch模块
fnmatch模块能够让我们使用 Unix Shell 中常用的通配符 (比如 *.py , Dat[0-9]*.csv 等) 去匹配文本字符串.
shell常用的命令如下
通配符 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[a-z] 匹配a-z的字符
一些常用的匹配:
模式 匹配对象
* 所有文件
g* 文件名以“g”开头的文件
b*.txt 以”b” 开头,中间有零个或任意多个字符,并以”.txt” 结尾的文件
Data??? 以“Data”开头,其后紧接着 3 个字符的文件
[abc]* 文件名以”a”,”b”, 或”c” 开头的文件
BACKUP.[0-9][0-9][0-9] 以”BACKUP.” 开头,并紧接着 3 个数字的文件
*[a-z123] 文件名以小写字母结尾,或以“1”,“2”,或“3”结尾的文件
"""
fnmatch模块主要有这几个方法fnmatch() 函数使用底层操作系统的大小写敏感规则 (不同的系统是不一样的) 匹配模式, Windows是大小写不敏感
fnmatchcase() 函数大小写匹配
fnmatch.filter()函数 返回一个列表, 符合匹配要求的返回
urls = [ 'http://www.python.org', 'https://www.qq.com', 'ftp://192.168.1.123', 'http://www.baidu.com', 'https://www.xunlei.com' ] print(fnmatch.filter(urls, 'https*')) out: ['https://www.qq.com', 'https://www.xunlei.com']
Python代码测试
string = ['aaa.txt', 'bbb', 'a.py', 'b.py', 'C.txt', 'p.py', '1.py'] urls = [ 'http://www.python.org', 'https://www.qq.com', 'ftp://192.168.1.123', 'http://www.baidu.com', 'https://www.xunlei.com' ] # shell通配符 # 字符类测试 print(string) print([fnmatch.fnmatch(s, '*.py') for s in string]) # *号, 和re模块一样匹配0或任意多个字符 print(string) print([fnmatch.fnmatch(s, '?a.py') for s in string]) # ?号, 匹配一个字符, 不包含0个 print(string) print([fnmatch.fnmatch(s, '[abc].py') for s in string]) # 字符集[]号, 和re模块一样匹配字符集中的一个 print(string) print([fnmatch.fnmatch(s, '[a-zA-Z].py') for s in string]) # 字符集表示匹配任意一个字母 print(urls) print([fnmatch.fnmatch(url, 'https*.com') for url in urls]) # 匹配以https开头.com结尾的串
['aaa.txt', 'bbb', 'a.py', 'b.py', 'C.txt', 'p.py', '1.py'] [False, False, True, True, False, True, True] ['aaa.txt', 'bbb', 'a.py', 'b.py', 'C.txt', 'p.py', '1.py'] [False, False, False, False, False, False, False] ['aaa.txt', 'bbb', 'a.py', 'b.py', 'C.txt', 'p.py', '1.py'] [False, False, True, True, False, False, False] ['aaa.txt', 'bbb', 'a.py', 'b.py', 'C.txt', 'p.py', '1.py'] [False, False, True, True, False, True, False] ['http://www.python.org', 'https://www.qq.com', 'ftp://192.168.1.123', 'http://www.baidu.com', 'https://www.xunlei.com'] [False, True, False, False, True]

浙公网安备 33010602011771号