python基礎 re模組匹配時貪婪和非貪婪模式

2022-09-06 06:03:10 字數 1343 閱讀 3912

python貪婪和非貪婪

正規表示式通常用於在文字中查詢匹配的字串。python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;非貪婪則相反,總是嘗試匹配盡可能少的字元。在"*","?","+",""後面加上?,使貪婪變成非貪婪。

>>> s="this is a number 234-235-22-423"

>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'4-235-22-423'

>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'234-235-22-423'

>>>

正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串,在我們上面的例子裡面,「.+」會從字元 串的啟始處抓取滿足模式的最長字元,其中包括我們想得到的第乙個整型欄位的中的大部分,「\d+」只需一位字元就可以匹配,所以它匹配了數字「4」,而「.+」則匹配了從字串起始到這個第一位數字4之前的所有字元。

解決方式:非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。

下面這個例子仔細體會下

>>> re.match(r"aa(\d+)","aa2343ddd").group(1)

'2343'

>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)

'2'>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)

'2343'

>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)

'2343'

>>>

header">([\s\s]+?)sep20

匹配任何包括換行空白字元等, 非貪婪模式

header">([\s\s]+)sep20
匹配任何包括換行空白字元等, 貪婪模式
除開某字元

void main() 

匹配包括換行符在內的任意字元,以下為正確的正規表示式匹配規則:([\s\s]*)同時,也可以用「([\d\d]*)」「([\w\w]*)」來表示。

這個表示式可以匹配所有的非英文(比如中文):[^ -~]

下面這個換行可以了.

main()

Python爬蟲基礎 re模組的提取 匹配和替換

re是python的乙個第三方庫。為了能更直觀的看出re的效果,我們先新建乙個html網頁檔案 可直接複製 index.html email re qq.com 手機號 88888888 ok,然後我們進入主題。re主要有三個功能 提取 匹配 替換。1 提取findall re.findall 正規...

Python基礎之re模組

為了編寫可維護的 我們把很多的函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式,在python中,乙個.py檔案就稱為乙個模組 使用模組的好處 大大提高了 的可維護性 其次 編寫 不必從零開始 當乙個模組編寫完畢 就可以被其他地方引用 我們在編寫程...

python模組 re模組

匹配任意字元 匹配指定字元類別 字元開頭 字元結尾 取非字元 重複多次字元 0次或多次 重複多次字元 1次或多次 重複單次字元 左右表示式任意匹配 重複m到n次字元 重複m次字元 d 匹配任何十進位制數,相當於 0 9 d 匹配任何非數字字元,相當於 0 9 s 匹配任何空白字元,相當於 fdss ...