300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

时间:2023-07-12 06:30:30

相关推荐

匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式。

一、贪婪匹配和非贪婪匹配

举例说明概念:

print('非贪婪匹配',re.search('el+?', 'hello world',re.I))print('贪婪匹配',re.search('el+', 'hello world',re.I))贪婪匹配 非贪婪匹配

从代码中可以看出:

贪婪模式:正则表达式一般趋向于最大字符长度的匹配,也就是所谓的贪婪匹配。如上面的结果为“ell”

非贪婪模式:在整个表达式匹配成功的前提下,尽可能最少长度的匹配,如上面的结果为“el”

二、量词匹配

常见的量词有*,+,?,{m,n}

re*匹配0个或多个的表达式。re+匹配1个或多个的表达式。re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式re{ n}匹配n个前面表达式。例如,"o{2}"不能匹配"god"中的"o",但是能匹配"good"中的两个o。re{ n,}精确匹配n个前面表达式。例如,"o{2,}"不能匹配"god"中的"o",但能匹配"gooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

在python中默认采用的是贪婪模式,使用非贪婪模式的话,只需要在量词后面直接加上一个问号”?”。其他的量词匹配都是尽可能多地满足匹配。

三、代码示例

import reprint('贪婪匹配',re.search('little.*', '2 little dogs ate my homework yesterday.',re.I))print('非贪婪匹配',re.search('little.*?', '2 little dogs ate my homework yesterday.',re.I))print('量词匹配长度为2',re.search('little.{2}', '2 little dogs ate my homework yesterday.',re.I))print('量词匹配长度至少为2',re.search('little.{2,}', '2 little dogs ate my homework yesterday.',re.I))print('量词匹配贪婪',re.search('little.{2,6}', '2 little dogs ate my homework yesterday.',re.I))print('量词匹配非贪婪',re.search('little.{2,6}?', '2 little dogs ate my homework yesterday.',re.I))贪婪匹配 非贪婪匹配 量词匹配长度为2 量词匹配长度至少为2 量词匹配贪婪 量词匹配非贪婪

.*表示匹配后续单个字符串的0个或多个

1、从代码中可以看出,默认的贪婪匹配“little.*”,只有找到单个字符串不满足或匹配结束时才会停止匹配。

2、而非贪婪匹配,只要是后续单个字符串有*(匹配0个或多个的表达式)个匹配就停止,故匹配结果为little。

3、组合匹配中,问号(?)配合其他量词使用,可以更好的控制匹配结果长度。

四、总结

python正则表达式的贪婪模式与非贪婪模式,可以简单理解是否加问号(?),但合理利用其他量词匹配(如*,+,{m,n}),可能会达到事半功倍的效果。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。