浅析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,多行,匹配,模式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2023-11-19 07:25:14
python获取本机所有IP地址的方法
2022-08-01 16:38:55
![](https://img.aspxhome.com/file/2023/7/124797_0s.jpg)
Python正则表达式的另类解答
2023-08-02 06:58:04
![](https://img.aspxhome.com/file/2023/7/61717_0s.png)
Django单元测试工具test client使用详解
2021-04-11 22:25:58
Python docx库代码演示
2021-12-11 12:18:02
python中验证码连通域分割的方法详解
2022-09-30 11:04:00
python实现将list拼接为一个字符串
2022-10-27 05:50:06
python分析apache访问日志脚本分享
2021-08-12 04:20:09
教你利用Python+Turtle绘制简易版爱心表白
2023-04-09 19:41:49
![](https://img.aspxhome.com/file/2023/6/124986_0s.gif)
Python生成ubuntu apt镜像地址实现
2023-10-13 04:39:29
![](https://img.aspxhome.com/file/2023/7/121717_0s.png)
MS Server和Oracle中对NULL处理的一些细节差异
2009-06-10 17:35:00
Python Scapy随心所欲研究TCP协议栈
2023-06-10 23:12:29
Python抓取Discuz!用户名脚本代码
2023-06-20 00:34:40
![](https://img.aspxhome.com/file/2023/7/99047_0s.png)
Python中的turtle画箭头,矩形,五角星
2023-11-22 13:38:12
![](https://img.aspxhome.com/file/2023/4/97734_0s.png)
10款顶级jQuery插件推荐
2011-08-14 07:55:39
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2022-12-11 11:59:15
![](https://img.aspxhome.com/file/2023/8/95858_0s.png)
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2021-06-13 09:13:14
![](https://img.aspxhome.com/file/2023/0/76840_0s.png)
Python按键或值对字典进行排序
2021-01-02 10:45:52
python禁用键鼠与提权代码实例
2022-12-11 11:54:59
[JS效果]动画效果打开/关闭/移动层
2008-04-10 11:42:00