[00103]用Shell通配符匹配字符串

来源:互联网 发布:辽金之战 知乎 编辑:程序博客网 时间:2024/05/09 16:33

用Shell通配符匹配字符串

一、 解决问题

你想使用 Unix Shell 中常用的通配符(比如 .py , Dat[0-9].csv 等)去匹配文本字符串

二、解决方案

fnmatch 模块 fnmatch(), fnmatchcase()

三、代码说明

from fnmatch import fnmatch, fnmatchcase"""fnmatch() 函数使用底层操作系统的大小写敏感规则不同的系统是不一样的)来匹配模式。"""resval = fnmatch("foo.txt", "*.txt")print (resval) #->Trueresval = fnmatch("foo.txt", "?oo.txt")print (resval) #->Trueresval = fnmatch("Dat45.csv", "Dat[0-9]*")print (resval) #->Falsenames = ['Dat1.csv', 'Dat2.csv', 'config.ini', 'foo.py']fl = [name for name in names if fnmatch(name, 'Dat*.csv')]print (fl) #->['Dat1.csv', 'Dat2.csv']"""使用fnmatchcase() 来解决跨平台的问题, 保持大小写敏感"""#On OS X (Mac)resval = fnmatch("foo.txt", "*.TXT")print (resval) #->False#(window)resval = fnmatch("foo.txt", "*.TXT")print (resval) #->True
"""在处理非文件名的字符串也是很有用处"""addresses = [    '5412 N CLARK ST',    '1060 W ADDISON ST',    '1039 W GRANVILLE AVE',    '2122 N CLARK ST',    '4802 N BROADWAY']from fnmatch import fnmatchresval = [addr for addr in addresses if fnmatchcase(addr, '* ST')]print (resval) #->['5412 N CLARK ST', '1060 W ADDISON ST', '2122 N CLARK ST']

四、关联知识

五、总结

六、代码地址

github地址:https://github.com/weichen666/python_cookbook
目录/文件:first_selection/learn_str_fnmacth.py

七、参考

0 0
原创粉丝点击