re模組的高階用法

2021-09-25 14:02:09 字數 1804 閱讀 8378

匹配閱讀文章的次數

import re

ret = re.search(r"\d+", "閱讀次數為 10887")

print(ret.group())

import re

ret = re.findall(r"\d+", "python = 8989, c = 3456, c++ = 78781")

print(ret)

#執行結果

['8989', '3456', '78781']

import re

ret = re.sub(r"\d+", '998', "python = 997")

print(ret)

# 執行結果

python = 998

import re

x = "\info:xiaozhang 33 shandong"

ret = re.split(r":| ", "info:xiaozhang 33 shandong")

print(ret)

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'

>>>

與大多數程式語言相同,正規表示式裡使用"「作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元」",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。

python裡的原生字串很好地解決了這個問題,有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。

>>> ret = re.match(r"c:\\a",mm).group()

>>> print(ret)

c:\a

re模組及其用法

一 re模組下的常用方法 首先在使用re模組之前,需要引入re模組 import re 1.findall 返回列表,找到所有的匹配項 ret re.findall d asda132eqwe啊阿達456 print ret 132 456 2.search 匹配從左到右第乙個符合,返回乙個變數,通...

re模組findall函式用法

本文件介紹了正規表示式元字元 和 re模組 findall 函式用法。給予正規表示式強大的功能和靈活性。表 示 法 描述正規表示式示例 符號literal 匹配文字字串的字面值literal foo.匹配任何字元 除了 n 之外 b.b 匹配字串起始部分 dear 匹配字串終止部分 bin sh 表...

re模組中group 與groups 用法

re模組中group 與groups 用法 自學python中一些小收穫和踩過的坑。標記下 先上案例1 group a 1,234 spam re.compile r d d re.search spam,a group re.search spam,a group 0 1,234 re.searc...