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

用Shell通配符匹配字符串

一、 解决问题

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

二、解决方案

fnmatch 模块 fnmatch(), fnmatchcase()

三、代码说明

from fnmatch import fnmatch, fnmatchcase

"""
fnmatch() 函数使用底层操作系统的大小写敏感规则
不同的系统是不一样的)来匹配模式。
"""

resval = fnmatch("foo.txt", "*.txt")
print (resval) #->True

resval = fnmatch("foo.txt", "?oo.txt")
print (resval) #->True

resval = fnmatch("Dat45.csv", "Dat[0-9]*")
print (resval) #->False

names = ['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 fnmatch
resval = [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

七、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值