当前位置: 首页 > Python编程 > Python编程实战技能 > Python编程学习教程 > Python 多行匹配模式了解

Python 多行匹配模式了解

发布时间:2020年10月30日 09:00:13 来源:环球青藤 点击量:588

【摘要】问题你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。解决方案这个问题很典型的出现在当你用点( )去匹配任意字符的

问题

你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。

解决方案

这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。比如,假设你想试着去匹配C语言分割的注释:

>>> comment = re.compile(r'/*(.*?)*/')>>> text1 = '/* this is a comment */'>>> text2 = '''/* this is a... multipne comment */... '''>>>>>> comment.findall(text1)[' this is a comment ']>>> comment.findall(text2)[]>>>

为了修正这个问题,你可以修改模式字符串,增加对换行的支持。比如:

>>> comment = re.compile(r'/*((?:.|n)*?)*/')>>> comment.findall(text2)[' this is an multipne comment ']>>>

在这个模式中,(?:.|n) 指定了一个非捕获组(也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。

讨论

re.compile() 函数接受一个标志参数叫 re.DOTALL ,在这里非常有用。它可以让正则表达式中的.匹配包括换行符在内的任意字符。比如:

>>> comment = re.compile(r'/*(.*?)*/', re.DOTALL)>>> comment.findall(text2)[' this is an multipne comment ']

对于简单的情况使用 re.DOTALL 标记参数工作的很好,但是如果模式非常复杂或者是为了构造字符串令牌而将多个模式合并起来(2.18节有详细描述),这时候使用这个标记参数就可能出现一些问题。如果让你选择的话,最好还是定义自己的正则表达式模式,这样它可以在不需要额外的标记参数下也能工作的很好。

推荐教程:《Python教程》

以上就是小编分享的关于Python 多行匹配模式了解的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

分享到: 编辑:wangmin

就业培训申请领取
您的姓名
您的电话
意向课程
点击领取

环球青藤

官方QQ

扫描上方二维码或点击一键加群,免费领取大礼包,加群暗号:青藤。 一键加群

绑定手机号

应《中华人民共和国网络安全法》加强实名认证机制要求,同时为更加全面的体验产品服务,烦请您绑定手机号.

预约成功

本直播为付费学员的直播课节

请您购买课程后再预约

环球青藤移动课堂APP 直播、听课。职达未来!

安卓版

下载

iPhone版

下载
环球青藤官方微信服务平台

刷题看课 APP下载

免费直播 一键购课

代报名等人工服务

课程咨询 学员服务 公众号

扫描关注微信公众号

APP

扫描下载APP

返回顶部