浅析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中for循环详解
Jan 17 Python
python 字典(dict)按键和值排序
Jun 28 Python
python处理html转义字符的方法详解
Jul 01 Python
使用python实现ANN
Dec 20 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python 实现自动导入缺失的库
Oct 29 Python
python的time模块和datetime模块实例解析
Nov 29 Python
python学习笔记之多进程
Aug 06 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
用Python简陋模拟n阶魔方
Apr 17 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中Snoopy类用法实例
2015/06/19 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
js实现无缝滚动图
2017/02/22 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
vue 运用mock数据的示例代码
2017/11/07 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python functools模块学习总结
2015/05/09 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
酒店门卫岗位职责
2013/12/29 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
经营目标管理责任书
2014/07/25 职场文书
企业领导对照检查材料
2014/08/20 职场文书
党建工作汇报材料
2014/12/24 职场文书
沈阳故宫导游词
2015/01/31 职场文书
医者仁心观后感
2015/06/17 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python