浅析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实现Linux下守护进程的编写方法
Aug 22 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
python方法生成txt标签文件的实例代码
May 10 Python
python如何实现代码检查
Jun 28 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python 使用生成器代替线程的方法
Aug 04 Python
深入了解Python装饰器的高级用法
Aug 13 Python
python3 删除所有自定义变量的操作
Apr 08 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JS location几个方法小姐
2008/07/09 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
python模块之StringIO使用示例
2015/04/08 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
详解小白之KMP算法及python实现
2019/04/04 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
python实现文件的分割与合并
2019/08/29 Python
python打印异常信息的两种实现方式
2019/12/24 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
银行介绍信范文
2014/01/10 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
书法比赛获奖感言
2014/02/10 职场文书
暑假学习心得体会
2014/09/02 职场文书
员工年终自我评价
2014/09/14 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers