匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配
此文為python正則表達(dá)式的高階入門,正則基礎(chǔ)入門請(qǐng)參考程序員入門基礎(chǔ):python的正則表達(dá)式。
一、貪婪匹配和非貪婪匹配
舉例說明概念:
print('非貪婪匹配',re.search('el+?', 'hello world',re.I))print('貪婪匹配',re.search('el+', 'hello world',re.I))貪婪匹配 非貪婪匹配從代碼中可以看出:
貪婪模式:正則表達(dá)式一般趨向于最大字符長(zhǎng)度的匹配,也就是所謂的貪婪匹配。如上面的結(jié)果為“ell”
非貪婪模式:在整個(gè)表達(dá)式匹配成功的前提下,盡可能最少長(zhǎng)度的匹配,如上面的結(jié)果為“el”
二、量詞匹配
常見的量詞有*,+,?,{m,n}
re*匹配0個(gè)或多個(gè)的表達(dá)式。re+匹配1個(gè)或多個(gè)的表達(dá)式。re?匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式re{ n}匹配n個(gè)前面表達(dá)式。例如,"o{2}"不能匹配"god"中的"o",但是能匹配"good"中的兩個(gè)o。re{ n,}精確匹配n個(gè)前面表達(dá)式。例如,"o{2,}"不能匹配"god"中的"o",但能匹配"gooood"中的所有o。"o{1,}"等價(jià)于"o+"。"o{0,}"則等價(jià)于"o*"。re{ n, m}匹配 n 到 m 次由前面的正則表達(dá)式定義的片段,貪婪方式在python中默認(rèn)采用的是貪婪模式,使用非貪婪模式的話,只需要在量詞后面直接加上一個(gè)問號(hào)”?”。其他的量詞匹配都是盡可能多地滿足匹配。
三、代碼示例
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('量詞匹配長(zhǎng)度為2',re.search('little.{2}', '2 little dogs ate my homework yesterday.',re.I))print('量詞匹配長(zhǎng)度至少為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))貪婪匹配 非貪婪匹配 量詞匹配長(zhǎng)度為2 量詞匹配長(zhǎng)度至少為2 量詞匹配貪婪 量詞匹配非貪婪.*表示匹配后續(xù)單個(gè)字符串的0個(gè)或多個(gè)
1、從代碼中可以看出,默認(rèn)的貪婪匹配“l(fā)ittle.*”,只有找到單個(gè)字符串不滿足或匹配結(jié)束時(shí)才會(huì)停止匹配。
2、而非貪婪匹配,只要是后續(xù)單個(gè)字符串有*(匹配0個(gè)或多個(gè)的表達(dá)式)個(gè)匹配就停止,故匹配結(jié)果為little。
3、組合匹配中,問號(hào)(?)配合其他量詞使用,可以更好的控制匹配結(jié)果長(zhǎng)度。
四、總結(jié)
python正則表達(dá)式的貪婪模式與非貪婪模式,可以簡(jiǎn)單理解是否加問號(hào)(?),但合理利用其他量詞匹配(如*,+,{m,n}),可能會(huì)達(dá)到事半功倍的效果。
總結(jié)
以上是生活随笔為你收集整理的匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php显示doc文件乱码,如何解决php
- 下一篇: html彩色背景指令,HTML_第四章