python正则表达式详解,python正则表达式或者用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: