浅析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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python 对象中的数据类型
May 13 Python
python查询mysql,返回json的实例
Mar 26 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Atom的python插件和常用插件说明
Jul 08 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
python文件选择对话框的操作方法
Jun 27 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
浅谈python中的多态
Jun 15 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关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
监控Nodejs的性能实例代码
2019/07/02 NodeJs
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
Python实现全局变量的两个解决方法
2014/07/03 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
python版DDOS攻击脚本
2019/06/12 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
详解Python中import机制
2020/09/11 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
销售业务实习自我鉴定
2013/09/23 职场文书
电气工程师岗位职责
2014/01/01 职场文书
自我鉴定书
2014/03/24 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
MySQL库表名大小写的选择
2021/06/05 MySQL