Python 实用技巧之利用Shell通配符做字符串匹配


Posted in Python onAugust 23, 2019

1、需求

当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配。

2、解决方案

fnmatch模块提供了两个函数:fnmatch()fnmatchcase(),可用来执行这样的匹配,使用起来非常简单。

实例:

from fnmatch import fnmatch,fnmatchcase
print(fnmatch('mark.txt','*.txt'))
print(fnmatch('mark.txt','?ark.txt'))
print(fnmatch('mark2018.txt','?ark201[0-9].txt'))

运行结果:

True
True
True

一般来说,fnmatch()的大小写匹配规则与底层文件相同,例如:

print(fnmatch('mark.txt','*.TXT'))

上面代码,在Max下运行为False,在Windows下运行为True。

如果这个大小写区别对我们很重要,我们就应该使用fnmatchcase()。它会完全根据我们提供的大小写方法来做匹配。

实例:

from fnmatch import fnmatch,fnmatchcase
print(fnmatchcase('mark.txt','*.TXT'))

结果:

False

关于这些函数,一个常被忽略的特性是它们在处理非文件名式的字符串时的潜在用途。
例如,

from fnmatch import fnmatchcase
#假设有一组街道地址,就像这样:
address=[
  '111 A 上海 SH',
  '112 B 上海 SH',
  '113 C 上海 SH',
  '124 D 北京 BJ',
  '138 E 北京 BJ',
  '145 F 北京 BJ',
]
result=[addr for addr in address if fnmatchcase(addr,'1[1-3][1-5]*BJ')]
print(result)

运行结果:

['124 D 北京 BJ']

3、分析

fnmatch完成的匹配操作有点介于简单的字符串方法和全功能的正则表达式之间。
如果实际上是想编写匹配文件名的代码,那应该使用glob模块来完成,后面会介绍到的。

总结

以上所述是小编给大家介绍的Python 实用技巧之利用Shell通配符做字符串匹配,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python struct模块解析
Jun 12 Python
详解python函数传参是传值还是传引用
Jan 16 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python解析多层json操作示例
Dec 30 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 Python
Python读取二进制文件代码方法解析
Jun 22 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 #Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 #Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 #Python
自定义django admin model表单提交的例子
Aug 23 #Python
django admin 自定义替换change页面模板的方法
Aug 23 #Python
解决python多行注释引发缩进错误的问题
Aug 23 #Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 #Python
You might like
基于MySQL体系结构的分析
2013/05/02 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
python抓取百度首页的方法
2015/05/19 Python
python跳出双层for循环的解决方法
2019/06/24 Python
python 元组和列表的区别
2020/12/30 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
幼儿园中班上学期评语
2014/04/18 职场文书
六一儿童节标语
2014/10/08 职场文书
演讲开头怎么书写?
2019/08/06 职场文书