浅析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实现根据月份和日期得到星座的方法
Mar 27 Python
简单介绍Python中的try和finally和with方法
May 05 Python
python筛选出两个文件中重复行的方法
May 31 Python
python3将视频流保存为本地视频文件
Jun 20 Python
Python实现12306火车票抢票系统
Jul 04 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
python实现磁盘日志清理的示例
Nov 05 Python
Pandas搭配lambda组合使用详解
Jan 22 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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文本操作类
2006/11/25 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
js简单时间比较的方法
2016/08/02 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
python的pip有什么用
2020/06/17 Python
python调用私有属性的方法总结
2020/07/24 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
银行员工辞职信范文
2014/01/20 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
顶岗实习计划书
2015/01/16 职场文书
党员进社区活动总结
2015/05/07 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python