Python3正規表示式之貪婪模式與非貪婪模式

2021-09-27 18:58:20 字數 1810 閱讀 4433

正規表示式是乙個特殊字串行,主要是幫助使用者檢索乙個字串是否與某種模式匹配或者在txt文件中檢測匹配的字串序列,然後將刪除或者替換,在日常變種中我們也經常會進行字元查詢和替換,這些的實現就是通過正規表示式提供的。關於正規表示式的使用,可以參考和此處我主要介紹一下自己的見解並且作為學習過程的乙個記錄。

在python語言和大多數程式語言的數量詞預設是貪婪的(少量預設非貪婪),貪婪模式總是嘗試匹配盡可能多的字元,而非貪婪模式剛好相反,其總是嘗試匹配盡可能燒得字元。

具體看下面的例子:

import re

string = 'abbbc'

pattern_greed = re.compile('\w+')

pattern_nogreed = re.compile('\w+?')

pg = pattern_greed.match(string)

pn = pattern_nogreed.match(string)

print(pg.group())

print(pn.group())

輸出結果為:

貪婪模式輸出結果為: abbbc

非貪婪模式輸出結果為: a

可以看出,在不加「?」的情況下輸出最大匹配項,即為貪婪模式,而加了「?」的時候,輸出為a為最小匹配項。

在python語言中預設貪婪模式,要使用非貪婪模式則需加「?」,下表是常用的幾種正規表示式符號:

符號含義

\d匹配乙個數字字元

\w匹配包括下劃線的任意單詞字元

+前乙個字元至少出現一次

*前乙個字元出現次數大於等於零次(可出現無數次,也可不出現)

?非貪婪模式標誌,進行最小匹配(配合+,*使用),前乙個字元出現0次或1次

前乙個字元出現m次

前乙個字元出現至少m次,至多n次

下面具體講一下上面例子的結果:

貪婪模式:正規表示式為"\w+",即包括下劃線的任意單詞字元出現至少一次或多次,因為是貪婪匹配,會盡可能的匹配,因而結果就為abbbc,其都是單詞字元,再看下面的例子:

import re

string = 'abbbc'

pattern_greed = re.compile('ab+')

pg = pattern_greed.match(string)

print('貪婪模式輸出結果為:', pg.group())

結果為:

貪婪模式輸出結果為: abbb
這個正規表示式'+'的前乙個字元為b,則b出現至少一次或無窮次,在貪婪模式下,在'abbbc'中匹配'ab'的最大項即為'abbb',與輸出結果相同。

非貪婪模式:在第乙個例子中正規表示式為"\w+?",'\w'表示包括下劃線的任意單詞字元出現至少一次或多次,又'?'表示為非貪婪模式,因而會去盡可能匹配最小的項,得到最終結果'a'。再看下面的例子:

import re

string = 'abbbc'

pattern_nogreed = re.compile('ab+?')

pn = pattern_nogreed.match(string)

print('非貪婪模式輸出結果為:', pn.group())

輸出結果:

非貪婪模式輸出結果為: ab
這個正規表示式'+'的前乙個字元為b,則b出現至少一次或無窮次,在非貪婪模式下,在'abbbc'中匹配'ab'的最小項即為'ab',與輸出結果相同。

python3正規表示式

正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個...

Python3 正規表示式

常用的匹配模式 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。re.match函式 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match...

Python3 正規表示式

正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。python 自1.5版本起增加了re 模組,它提供 perl 風格的正規表示式模式。re 模組使 python 語言擁有全部的正規表示式功能。compile 函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件。該...