浅析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新手实现2048小游戏
Mar 31 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
Python通过2种方法输出带颜色字体
Mar 02 Python
keras 如何保存最佳的训练模型
May 25 Python
Python-openCV开运算实例
Jul 05 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 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操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php mail to 配置详解
2014/01/16 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
Python和php通信乱码问题解决方法
2014/04/15 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
python常用知识梳理(必看篇)
2017/03/23 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
wxpython绘制圆角窗体
2019/11/18 Python
python有几个版本
2020/06/17 Python
Python如何在bool函数中取值
2020/09/21 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
学生安全承诺书
2014/05/22 职场文书
违纪检讨书
2015/01/27 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
Pandas 稀疏数据结构的实现
2021/07/25 Python
python turtle绘图
2022/05/04 Python