字符串匹配之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]

 

posted @ 2019-07-28 23:01  yscl  阅读(766)  评论(0)    收藏  举报