python之常用正則表達式


以下整理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{3} ->OKKK
{m,n} 匹配前一個字符m到n次 OK{1,2} ->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 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'輕度污染'},{ymd:'2018-01-02',tianqi:'陰~小雨',aqiInfo:'優'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'優'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'優'}"

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

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 上海未來 - 浦東-金楊 -2005年建'

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

print(split)

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

print(split_strip )

out:

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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM