python正则表达式详解,python正则表达式或者用法
本文对目录的贪婪模式和非贪婪模式进行了定义,将贪婪模式转化为非贪婪模式。
贪婪模式和非贪婪模式
定义贪婪模式:默认情况下,在整个表达式匹配成功的前提下,匹配尽可能多的表达式。
非贪婪模式(懒惰模式):在整个表达式匹配成功的前提下,尽量少匹配。
将贪婪模式转换为非贪婪模式,添加?匹配重复的元字符后?编号:
贪婪的
不贪婪
*
*?
?
?
?
{m,n}
{m,n}?
示例1(贪婪模式)
In: re.findall(rab? abbbbbbbbbc )
Out: [ab]
In: re.findall(rab{2,5} , abbbbbbbbbc )
Out: [abbbbb]如上例所示,[ab?]的意思是匹配[B] 0次或者1次,但是我们这个帮助我们尽可能匹配的程序,直接匹配一次,输出[ab]。而[ab{2,5}]是匹配2~5次的[B]。我们的程序也帮我们尽可能多的匹配,直接匹配5次,输出[abbbbb]。这种匹配模式就是贪婪模式。
那么我们如何从贪婪模式转变为非贪婪模式呢?添加[?]直接在重复的元字符之后。】.
示例2(贪婪模式和非贪婪模式)
In: re.findall (r \(。\),(ABCD) EFGH (higkrf)) #贪婪模式
Out: [(abcd)efgh(higkrf)]
In: re.findall(r\(。\),(abcd)efgh(higkrf)) #非贪婪模式
Out: [(abcd),(higkrf)]这个例子中[()]括号括起来的内容是什么?有[(abcd)efgh(higkrf)],[(abcd)],[(higkrf)]
如果使用贪婪模式,则全部匹配;如果使用非贪婪模式,则匹配[(abcd)]和[(higkrf)]。
这是因为在python中,当[(]满足第一个[)]时,虽然满足匹配要求,但在贪婪模式下,py也可以认为是[。]并继续向后匹配(匹配多);在非贪婪模式下,在满足正则表达式规则的前提下,当[(]满足第一个[)]时,py会直接把括号内的内容作为匹配对象放入结果列表。
转载请联系作者获得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。