浅析Python 多行匹配模式
作者:看云 时间:2022-07-23 13:32:18
问题
你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。
解决方案
这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。比如,假设你想试着去匹配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节有详细描述),这时候使用这个标记参数就可能出现一些问题。如果让你选择的话,最好还是定义自己的正则表达式模式,这样它可以在不需要额外的标记参数下也能工作的很好。
来源:https://www.kancloud.cn/kancloud/python3-cookbook/47163
标签:Python,多行,匹配,模式
0
投稿
猜你喜欢
Python中关于函数的具体用法范例以及介绍
2023-06-04 19:48:28
python游戏开发之视频转彩色字符动画
2022-05-18 21:11:23
详细总结Python常见的安全问题
2022-04-22 14:19:20
如何使用Go语言实现远程执行命令
2024-04-25 15:16:39
python 三边测量定位的实现代码
2023-02-03 08:37:31
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2023-08-29 09:47:47
详解python中的三种命令行模块(sys.argv,argparse,click)
2021-04-24 12:57:10
python银行卡号码校验Luhn模10算法
2022-03-18 07:32:52
Python IDLE Subprocess Connection Error的简单解决方法
2022-12-15 04:31:09
vue使用Google Recaptcha验证的实现示例
2024-05-13 09:08:25
Windows Server 2003下修改MySQL 5.5数据库data目录
2024-01-14 17:42:28
用Mimer Validator检查SQL查询
2024-01-24 17:12:01
教大家玩转Python字符串处理的七种技巧
2022-09-29 21:29:14
python、Matlab求定积分的实现
2021-08-25 15:43:28
python GUI计算器的实现
2021-11-30 01:00:53
在ASP.NET 2.0中操作数据之一:创建一个数据访问层
2023-06-24 16:58:54
python实现扫雷游戏
2022-05-19 00:59:01
ASP利用XMLHTTP实现表单提交以及cookies的发送的代码
2011-04-15 10:37:00
基于Python3.6中的OpenCV实现图片色彩空间的转换
2022-05-20 14:03:13
python进程管理工具supervisor使用实例
2022-08-24 13:47:03