python之常用正規表示式

2022-07-20 19:06:14 字數 2921 閱讀 7561

以下整理python中常用的正則符號,相信能夠熟悉掌握這些正則符號,大部分字串處理將會游刃有餘。

符號含義示例.

可以匹配任意字元,但不包含換行符'\n'

pyt.on ->pytmon

\轉義符,一般用於保留字串中的特殊元字元

10\.3 ->10.3

|邏輯或

人a|a->人a或者人a

用於匹配的一組字元

m[aa]n ->man 或者 man

\d與\d

\d匹配任意數字,\d代表所有的非\d

今天\d號 ->今天3號

\s與\s

\s匹配任意空白字元,\s代表所有非\s

你\s好 ->你  好

\w與\w

\w匹配字母數字和下劃線,\w代表所有非\w

p\wy ->pay 或者 p3y  p_y

*匹配前乙個字元0到無窮次

ok* ->o或者ok 或 okk

+匹配前乙個字元1到無窮次

ok+ ->ok或者ok 或 okk

?匹配前乙個字元0到1次

ok? ->o或者ok

{m}匹配前乙個字元m次

ok ->okkk

{m,n}

匹配前乙個字元m到n次

ok ->ok或者okk

另外 (.*?)用於分組,預設返回括號內的匹配內容,

在python開發爬蟲過程中經常會遇到正規表示式,其中(.*?) 的使用概率較高,那麼這個正規表示式到底什麼意思呢?

「.*?」 表示非貪心演算法,表示要精確的配對。

「.*」表示貪心演算法,表示要盡可能多的匹配

「()」 表示要獲取括弧之間的資訊。

基於正規表示式完成字串的查詢,替換和分割操作,這些操作都需要匯入re模組,並使用如下幾個函式。

1.匹配查詢函式

findall(pattern, string, flags=0)

findall 函式可以對指定的字串進行遍歷匹配,獲取字串中所有匹配的子串,並返回乙個列表結果。該函式的引數含義如下:

pattern:指定需要匹配的正規表示式。

string:指定待處理的字元flags:指定匹配模式,常用的值可以是re.i、re.m、re.s和re.x。

re.i的模式是讓正規表示式對大小寫不敏感;

re.m的模式是讓正規表示式可以多行匹配;

re.s的模式指明正則符號.可以匹配任意字元,包括換行符\n;

re.x模式允許正規表示式可以寫得更加詳細,如多行表示、忽略空白字元、加入注釋等。

2.匹配替換函式

sub(pattern, repl, string, count=0, flags=0)

sub函式的功能是替換,類似於字串的replace方法,該函式根據正規表示式把滿足匹配的內容替換為repl。該函式的引數含義如下:

pattern:同findall函式中的pattern。

repl:  指定替換成的新值。

string:同findall函式中的string。

count:用於指定最多替換的次數,預設為全部替換。

flags:同findall函式中的flags。

3.匹配分割函式

split(pattern, string, maxsplit=0, flags=0)

split函式是將字串按照指定的正規表示式分隔開,類似於字串的split方法。該函式的具體引數含義如下:

pattern:同findall函式中的pattern。

maxsplit:用於指定最大分割次數,預設為全部分割。

string:同findall函式中的string。

flags:同findall函式中的flags。

示例:import re

string8 = ",,,"

#取出字串中所有的天氣狀態

print(re.findall("tianqi:'(.*?)' '',string8))     #此處注意觀察,(.*?)'  這裡面使用的是精確匹配,當匹配到後面是' 號就停止 

string9="i don't want to be someone that you're settling for. i don't want to be someone that anyone settles for. "

print(re.findall('\w*o\w',string9,flags = re.i))     #此處留個缺陷" don't  you're "匹配出來不是我們想要的結果,用於思考

##out:

['don', 'someon', 'you', 'for', 'don', 'someon', 'anyon', 'for']
string10 = '據路透社報道,由於土耳其軍隊離美軍駐地已經過近,美軍數架f-15戰鬥機和ah-64「阿帕奇」攻擊***在土軍陣地上方進行了威懾性飛行。'

print(re.sub('[,。,「」a-za-z0-9()]','',string10))    #將標點符號,數字和字母刪除

out:

據路透社報道由於土耳其軍隊離美軍駐地已經過近美軍數架-戰鬥機和-阿帕奇攻擊***在土軍陣地上方進行了威懾性飛行
#將每一部分的內容分割開

string11 = '2室2廳 | 101.62平 |低區/7層 | 朝南 \n 上海未來 - 浦東-金楊 -2023年建'

split =re.split('[-\|\n]',string11)      #列表內的所有符號作為分隔的標誌

print(split)

split_strip = [i.strip() for i in split]

print(split_strip )

out:

['2室2廳', '101.62平', '低區/7層', '朝南', '上海未來', '浦東', '金楊', '2023年建']

Python常用正規表示式

常用正規表示式 單個字元 符號 含義 除換行以外所有字元 a w a w 之間任意乙個字元 d 數字 0 9 d 非數字 w 數字 字母 下劃線 中文 w 非 w 的字元 s 所有的空白字元 s 非空白 數量修飾 符號 含義 任意多次 0 次 至少一次 1 次 可有可無 0 或 1 次 固定 m 次...

python之正規表示式常用

普通字元 匹配自身 匹配任意除換行符 n 外的字元 轉義字元,使後乙個字元改變原來的意思 編譯正規表示式模式,返回乙個物件的模式。對正規表示式使用較多的場景推薦使用,後續可以直接拿編譯出來的物件使用,大大提高效率 re.compile pattern,flags 0 pattern 編譯時用的表示式...

正規表示式 常用正規表示式

一 校驗數字的表示式 1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數字 d 5 零和非零開頭的數字 0 1 9 0 9 6 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7 帶1 2位小數的正數或負數 d d 8 正數 負數 和小數 d d 9 有兩位小數的...