浅析Python 多行匹配模式


Posted in Python onJuly 24, 2020

问题

你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。

解决方案

这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。比如,假设你想试着去匹配C语言分割的注释:

>>> comment = re.compile(r'/\*(.*?)\*/')
>>> text1 = '/* this is a comment */'
>>> text2 = '''/* this is a
... multiline comment */
... '''
>>>
>>> comment.findall(text1)
[' this is a comment ']
>>> comment.findall(text2)
[]
>>>

为了修正这个问题,你可以修改模式字符串,增加对换行的支持。比如:

>>> comment = re.compile(r'/\*((?:.|\n)*?)\*/')
>>> comment.findall(text2)
[' this is a\n multiline comment ']
>>>

在这个模式中,(?:.|\n) 指定了一个非捕获组(也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。

讨论

re.compile() 函数接受一个标志参数叫 re.DOTALL ,在这里非常有用。它可以让正则表达式中的.匹配包括换行符在内的任意字符。比如:

>>> comment = re.compile(r'/\*(.*?)\*/', re.DOTALL)
>>> comment.findall(text2)
[' this is a\n multiline comment ']

对于简单的情况使用 re.DOTALL 标记参数工作的很好,但是如果模式非常复杂或者是为了构造字符串令牌而将多个模式合并起来(2.18节有详细描述),这时候使用这个标记参数就可能出现一些问题。如果让你选择的话,最好还是定义自己的正则表达式模式,这样它可以在不需要额外的标记参数下也能工作的很好。

以上就是浅析Python 多行匹配模式的详细内容,更多关于Python 多行匹配模式的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
怎样使用Python脚本日志功能
Aug 14 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
python pandas库的安装和创建
Jan 10 Python
python自动化测试之如何解析excel文件
Jun 27 Python
python获取txt文件词向量过程详解
Jul 05 Python
Python3搭建http服务器的实现代码
Feb 11 Python
tensorflow多维张量计算实例
Feb 11 Python
python实现快递价格查询系统
Mar 03 Python
python实现飞船游戏的纵向移动
Apr 24 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
selenium如何定位span元素的实现
Jan 13 Python
Python图像处理二值化方法实例汇总
Jul 24 #Python
Python如何合并多个字典或映射
Jul 24 #Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 #Python
Python3.7安装pyaudio教程解析
Jul 24 #Python
python调用私有属性的方法总结
Jul 24 #Python
python中取绝对值简单方法总结
Jul 24 #Python
python代码能做成软件吗
Jul 24 #Python
You might like
php中全局变量global的使用演示代码
2011/05/18 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
详解python的ORM中Pony用法
2018/02/09 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
详解Python装饰器
2019/03/25 Python
详解python的argpare和click模块小结
2019/03/31 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
深入了解NumPy 高级索引
2020/07/24 Python
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
演讲稿怎么写
2014/01/07 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
《童趣》教学反思
2014/02/19 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
文体活动总结范文
2014/05/05 职场文书
2014年行政工作总结
2014/11/19 职场文书
公司会议开幕词
2015/01/29 职场文书
检讨书之工作不认真
2019/08/14 职场文书
python模板入门教程之flask Jinja
2022/04/11 Python
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers