lzth.net
当前位置:首页 >> (python语言)为什么正则表达式的 贪婪匹配模式 比 非贪婪模式 得到的匹配结果还要短? >>

(python语言)为什么正则表达式的 贪婪匹配模式 比 非贪婪模式 得到的匹配结果还要短?

第二捕获括号里面是 (0*) 0个或多个0, 后面接着是$行尾,02300不满足多个0.正则表达式改为:^(\d+?)(0.*)$结果就会是:("1", "02300")

第一个:我把贴吧给你的回复粘过来吧..*这个会先吞掉所有字符串,因为后面还有,.*会自觉的吐一些出来给后面的,这就是回溯.先吐出一个3,\d匹配成功继续.*勉强可以\d告诉前面的我匹配不了,挨个向前传话,.*没吃到也就吐不出了,.*告

我不知道你说的是java里面的regular expression还是其他的,如果是java的,则不能简单的分为贪婪和非贪婪,应分为Greedy、reluctant和possissive.这里说一下Greedy和possissive的区别.Greedy匹配就是先进行整个字符串匹配,如果不成功

import restr='abcdxyzsd1232abc'regex_greed='a.*d' # 贪婪模式,a开头找到最后的一个d才结束match_greed=re.match(regex_greed,str)print match_greed.group() # 匹配结果:abcdxyzsdregex_not_greed='a.*?d' # 非贪婪模式,a开头找到第一个d就结束match_not_greed=re.match(regex_not_greed,str)print match_not_greed.group() # 匹配结果:abcd

贪婪匹配是尽可能多的匹配字符非贪婪匹配是只要能匹配到,就停止匹配"abcdeb" 非贪婪匹配a.*?b 匹配“ab";贪婪匹配a.*?匹配"abcdeb" .,非贪婪匹配很可能需要回溯,因此效率不如贪婪匹配

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.

因为\S* 是贪心匹配,尽可能多匹配非空格字符,然后[a-zA-Z] 表示匹配到一个字母就结束这句正则就是 以字母开始和结尾 中间有一个@的非空格字符串

最近一直在研究正则表达式,原来接触过一段时间,但好久没有用了,基本都忘光了,然后上个礼拜五,又开始学习正则表达式,周末在家做了个采集电影院网站信息的一个程序,疯狂的实验了把正则,发现了一些常用的匹配正则和一些正则表

pattern+?是勉强匹配模式,也就是说这只匹配pattern能匹配到的最少字符,便不再往后匹配了.这是与贪婪模式最大的不同. (pattern在这里面指的是一个正则串) (\d+?)(0+?) 前一个分组至少要匹配一个数字,后一个分组至少要匹配一个0,所以最终会匹配到 1230,如果你再往下匹配的话,还会匹配到后面的00.(\d+?)(\d+?) 前一个分组至少要匹配一个数字,后一个分组也要至少要匹配一个数字,所以会匹配到12,现往下匹配还会匹配到30和00 测试如下:

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com