Python实用技法第27篇:编写多行模式的正则表达式

news/2024/5/8 1:00:53
上一篇文章: Python实用技法第26篇:定义实现最短匹配的正则表达式
下一篇文章: Python实用技法第28篇:将Unicode文本统一表示为规范形式

1、需求?

我们打算用正则表达式对一段文本块做匹配,但是希望在进行匹配时能够跨越多行。

2、解决方案?

这个问题一般出现在希望使用句点(.)来匹配任意字符,但是忘记了句点并不能匹配换行符。

实例:假设向匹配C语言风格的注释:

import re

str_pat=re.compile(r'/\*(.*?)\*/')
text1="/* mark */"
text2='''/* mark 
            2018    */'''
print(str_pat.findall(text1))
print(str_pat.findall(text2))

结果:

[' mark ']
[]

要解决这个问题,可以添加对换行符的支持。

实例:

import re

#将.换成(?:.|\n)
str_pat=re.compile(r'/\*((?:.|\n)*?)\*/')
text1="/* mark */"
text2='''/* mark 
            2018    */'''
print(str_pat.findall(text1))
print(str_pat.findall(text2))

结果:

[' mark ']
[' mark \n 2018 ']

(?:.|n)指定了一个非捕获组(即,这个组只做匹配但不捕获结果,也不会分配组号)。

3、分析?

re.compile()函数可接受一个有用的标记:re.DOTALL,这使得表达式中的句点【.】可以匹配所有的字符,也包括换行符。

实例:

import re

str_pat=re.compile(r'/\*(.*?)\*/',re.DOTALL)
text1="/* mark */"
text2='''/* mark 
            2018    */'''
print(str_pat.findall(text1))
print(str_pat.findall(text2))

结果:

[' mark ']
[' mark \n 2018 ']

对于简单的情况,使用re.DOTALL标记就可以很好的完成工作。但是如果要处理及其复杂的模式,可以选择利用非捕获组定义在自己的表达式中,这样无需额外的标记也能正常工作。

上一篇文章: Python实用技法第26篇:定义实现最短匹配的正则表达式
下一篇文章: Python实用技法第28篇:将Unicode文本统一表示为规范形式

http://www.niftyadmin.cn/n/3495239.html

相关文章

hibernate学习笔记(4)表单操作

User.hbm.xml的表单配置&#xff1a; ①主键 <id name"id" type"java.lang.Integer">   <column name"id" />   <generator class"assigned" /> </id> <id></id>中的内容为主键 &#xff08;…

YOLO3 + Python3.6 深度学习篇(附)- 文件的重组 - 移动 - 复制

从搜集数据的角度来看&#xff0c;越多的数据理论上说会有越高的准确率&#xff0c;但是每次爬虫找下来的图片只能够有百来张&#xff0c;如果分了很多不同的文件夹之后&#xff0c;为了迅速的将它们集合成完整的 “单一个” 资料夹&#xff0c;下面代码可以把多个文件夹里面的…

JavaScript 数据验证类

JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1、用户名验证 2、密码验证 3、重复密码验证 4、邮箱验证 5、手机号验证 6、验证码验证 */ var yb_validate function(){//用户名验证this.username function(username){if(username.leng…

企业文件会展中心——FTPS

FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型TFP协议&#xff0c;为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。    它和sftp连接方法类…

Excel员工考勤表模板,这三套送给您

考勤表不单单是公司员工每天上班的凭证&#xff0c;还是每个员工领工资的凭证&#xff0c;证据&#xff0c;它记录着员工每个月的上班次数&#xff1b;清晰的考勤表设置也够让员工做到心中有数&#xff0c;考勤表里面主要包括有迟到、早退、病假、事假、婚假等多种情况。 以下是…

v-if VS v-show

在vue实现轮播图效果 中分别用到 v-if和 v-show 下面讲讲我理解的他们的区别: v-if: 根据表达式的值的真假条件渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建。如果元素是 <template>&#xff0c;将提出它的内容作为条件块。 v-show: 根据表达式的值的真假条…

Alpha 9

摘要 队名&#xff1a;小白吃组长博客&#xff1a;hjj作业博客&#xff1a;冲刺倒计时之9团队部分 后敬甲&#xff08;组长&#xff09; 过去两天完成了哪些任务 答辩准备中和大佬们跟进进度接下来的计划 准备答辩还剩下哪些任务 持续跟进团队项目进度和老师沟通&#xff0c;确…

PYTHON_opencv 历程总览 - updating

OpenCV 是一个在影像与图像处理上非常实用且方便的一个工具&#xff0c;其庞大程度已经可以算是一个平台&#xff0c;支援了各式各样的编程语言&#xff0c;当然 Python 也是包含其中的“之一”&#xff0c;这个包集成了许多当下流行的图像处理算法&#xff0c;成为了他们呼叫函…