以下整理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 有兩位小數的...