浅析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获取一组数据里最大值max函数用法实例
May 26 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
python 获取字符串MD5值方法
May 29 Python
Python内存读写操作示例
Jul 18 Python
Django中的forms组件实例详解
Nov 08 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
python程序文件扩展名知识点详解
Feb 27 Python
django rest framework serializers序列化实例
May 13 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
python制作微博图片爬取工具
Jan 16 Python
Python&Matlab实现樱花的绘制
Apr 07 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
超级简单的发送邮件程序
2006/10/09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
js onload处理html页面加载之后的事件
2013/10/30 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
Python while循环使用else语句代码实例
2020/02/07 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
python求前n个阶乘的和实例
2020/04/02 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
python的Jenkins接口调用方式
2020/05/12 Python
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
工地安全生产标语
2014/06/06 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
青年联谊会致辞
2015/07/31 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python