浅析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 正则表达式操作指南
May 04 Python
python实现简单温度转换的方法
Mar 13 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
Python中的日期时间处理详解
Nov 17 Python
python实现rsa加密实例详解
Jul 19 Python
tensorflow中next_batch的具体使用
Feb 02 Python
Python求解任意闭区间的所有素数
Jun 10 Python
python区块及区块链的开发详解
Jul 03 Python
如何在Django配置文件里配置session链接
Aug 06 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
python判断元素是否存在的实例方法
Sep 24 Python
如何用python实现一个HTTP连接池
Jan 14 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 JSON 数据解析代码
2010/05/26 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
Angular使用Md5加密的解决方法
2017/09/16 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python 专题一 函数的基础知识
2017/03/16 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
python操作cfg配置文件方式
2019/12/22 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
献爱心捐款倡议书
2014/05/14 职场文书
访谈节目策划方案
2014/05/15 职场文书
一般党员对照检查材料
2014/09/24 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python