浅析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使用urllib2获取网络资源实例讲解
Dec 02 Python
Python实现Linux下守护进程的编写方法
Aug 22 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
Python的多维空数组赋值方法
Apr 13 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
python实现windows壁纸定期更换功能
Jan 21 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php中将网址转换为超链接的函数
2011/09/02 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
JavaScript事件列表解说
2006/12/22 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
详解Python中find()方法的使用
2015/05/18 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python基本语法练习实例
2017/09/19 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
文明礼仪小标兵事迹
2014/01/12 职场文书
战友聚会邀请函
2014/01/18 职场文书
公司保密承诺书
2014/03/27 职场文书
经费申请报告
2015/05/15 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
Python中22个万用公式的小结
2021/07/21 Python