Python实用技法第26篇:定义实现最短匹配的正则表达式
2019-08-15 16:42
1316 查看
1、需求
我们正在尝试用正则表达式对文本模式做匹配,但识别出来的是最长的可能匹配。相反,我们想将其修改为最短的可能匹配。
2、解决方案
这个问题通常会在匹配的文本被一对开始和结束的分隔符包起来的时候出现(例如带引号的字符串),为了说明这个问题,请看下面实例:
import re str_pat=re.compile(r'\"(.*)\"') text1='mark say "love"' text2='mark say "love",jingjing say "yes"' print(str_pat.findall(text1)) print(str_pat.findall(text2))
结果:
['love'] ['love",jingjing say "yes'] Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
在这个例子中,模式r'"(.)"'尝试去匹配包含在引号中的文本。但是,操作符在正则表达式中采用的是贪心策略,所以匹配过程是基于找出最长的可能匹配来进行的。所以上面才会出现【love",jingjing say "yes】这个匹配结果。
要解决这个问题,只要在模式中的*操作符后面加上?修饰符就可以了。
示例:
import re str_pat=re.compile(r'\"(.*?)\"') text1='mark say "love"' text2='mark say "love",jingjing say "yes"' print(str_pat.findall(text1)) print(str_pat.findall(text2))
结果:
['love'] ['love', 'yes']
这么做使得匹配过程不会以贪心方式进行,也就会产生最短的匹配了。
本节提到了一个当编写还有句点【.】字符的正则表达式常会遇到的问题。为了解决最长匹配问题,让匹配变为最短匹配,需要在*或+后加上一个【?】。
相关文章推荐
- Python实现正则表达式匹配任意的邮箱
- Python正则表达式:最短匹配
- LeetCode 10 正则表达式匹配 python实现
- 在php中用正则表达式实现最短匹配
- Python实现正则表达式匹配任意的邮箱
- Python: 正则表达式匹配多行,实现多行匹配模式
- python正则中最短匹配实现代码
- Python实现正则表达式匹配任意的邮箱方法
- 正则表达式实例总结-------最短匹配
- Python正则表达式的几种匹配用法
- Python正则表达式---全部能匹配的子串迭代器finditer及findall及以中文匹配部分中文
- Python正则表达式的几种匹配用法
- 匹配图像标签的正则表达式(Javascript和Python版)
- Python从文件中读取字符串,用正则表达式匹配中文字符的问题
- Python正则表达式匹配中文
- 正则表达式之最短匹配
- Python正则表达式的用法(1. 匹配)
- python正则表达式之贪婪引发的匹配无法退出,CPU 100%
- (学习)python非贪婪、多行匹配正则表达式例子
- 详解Python正则表达式之: (?P=name) match earlier named group 匹配前面已命名的组