美文网首页Python
非贪婪模式(?) --实现最短匹配的正则

非贪婪模式(?) --实现最短匹配的正则

作者: cook__ | 来源:发表于2018-09-30 18:21 被阅读73次

问题引入:

import re
str_pat = re.compile(r'\"(.*)\"')

text1 = 'Computer says "no."'
str_pat.findall(text1)
Out[4]: ['no.']

text2 = 'Computer says "no." Phone says "yes."'
str_pat.findall(text2)
Out[6]: ['no." Phone says "yes.']   # 输出有问题

问题:
在这个例子中,模式r'"(.)"'尝试去匹配包含在引号中文本。
但是,
操作符在正则表达式中采用的是贪心策略,所以匹配过程中是基于找出最长的可能匹配来进行的。
因此在text2例子中,它错误的匹配成2个被引号包围的字符串了

解决上述问题的方案:只要在模式中的*操作符后加上?修饰符就可以了, 这么做使得匹配过程不会以贪心方式进行,也就会产生出最短的匹配了
re.findall(r'\"(.*?)\"', text2)
Out[7]: ['no.', 'yes.']

相关文章

  • 非贪婪模式(?) --实现最短匹配的正则

    问题引入: 问题:在这个例子中,模式r'"(.)"'尝试去匹配包含在引号中文本。但是,操作符在正则表达式中采用的是...

  • 正则表达式的贪婪模式和非贪婪模式

    一、什么是贪婪模式和非贪婪模式? 定义 贪婪模式:正则表达式趋向于匹配最大长度。 非贪婪模式:正则表达式趋向于匹配...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 贪婪模式 一般情况下,正则表达式在匹配过程中会尽可能多的匹配 非贪婪模式 让正则...

  • 039 Python语法之正则表达式

    正则的基本语法 贪婪与非贪婪模式 Python中的数量词默认是贪婪模式的,总是默认尝试匹配更多的字符,非贪婪模式则...

  • JavaScript 正则表达式( 匹配网页的图片地址)

    正则表达式 - 元字符 贪婪模式与非贪婪模式 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为;贪婪模式 在...

  • 正则表达式

    贪婪模式和非贪婪模式 正则表达式是贪婪匹配的。比如:'123456789'.replace(/\d{3,6}/g,...

  • 2018-06-21正则表达式练习

    所有的正则表达式默认贪婪模式,意思就是尽可能尝试匹配更多的字符。关闭贪婪模式之后,非贪婪模式是让匹配到的尽可能少;...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 量词在默认下是尽可能多的匹配的,就是贪婪模式;非贪婪模式,让正则表达式尽可能少的...

  • Day18学习总结-正则表达式和Pygame

    贪婪与非贪婪 非贪婪:在正则中控制匹配不确定次数的符号后边可以加?,来表示尽可能少的匹配贪婪:在贪婪的时候,匹配是...

  • 正则表达式贪婪模式与非贪婪模式

    什么是正则表达式的贪婪模式和非贪婪模式? 我们先从例子入手: 原本想要匹配的字符为"witch"和"broom"两...

网友评论

    本文标题:非贪婪模式(?) --实现最短匹配的正则

    本文链接:https://www.haomeiwen.com/subject/zbowoftx.html