python正則表達(dá)式虏等,看完這篇文章就夠了...

心塞的兩件事
  • 文章排版

由于實在無法忍受微信公眾號的默認(rèn)排版方式,調(diào)整字體麻煩不說适肠,修改一下字體霍衫,還會影響到代碼高亮。
忍無可忍侯养,昨天通過markdown轉(zhuǎn)html配上css的裝飾代碼進行排版敦跌,以后寫完文莊轉(zhuǎn)化后直接發(fā)就好了。
本來覺得挺不錯的效果逛揩,今天朋友說整體風(fēng)格充斥這一種城鄉(xiāng)結(jié)合部的氣息柠傍。聽到這話,我感覺...以后文章要火息尺!畢竟毛爺爺說的好携兵,農(nóng)村包圍城市,武裝奪取政權(quán)... 誰幫我給農(nóng)民伯伯們推薦一下我城鄉(xiāng)結(jié)合部氣質(zhì)的公眾號,哈哈搂誉。

  • 公眾號留言

早上朋友說徐紧,為什么我公眾號發(fā)的文章不能留言,我還以為是因為粉絲太少,所以沒權(quán)限并级。晚上查了才知道拂檩,18年3月后申請的公眾號,都不能留言...不開心嘲碧。大家如果有什么想和我交流的稻励,可以在公眾號底部的==關(guān)于清風(fēng)==中添加我的微信,或者私信我都行...

今天講什么愈涩?

今天以為大學(xué)同學(xué)微信聊望抽,說最近在看我的公眾號,她是國企汽車制造業(yè)的履婉,但也要用python進行數(shù)據(jù)分析...之前看了往期的python字符串操作內(nèi)容煤篙,里面說到了正則表達(dá)式,想學(xué)習(xí)一下...
正則表達(dá)式這東西毁腿,你說它簡單它也簡單辑奈,你說它難吧,確實不容易已烤。為什么鸠窗?這東西就是死記硬背的。背過了相關(guān)的語法胯究,使用起來就so easy稍计。但記不熟語法,就犯難了唐片。網(wǎng)上關(guān)于python正則的帖子很多丙猬,我再去寫壓力比較大,盡可能的總結(jié)詳細(xì)一些吧费韭!

正則表達(dá)式簡介

正則表達(dá)式,是一個特殊的字符序列庭瑰,又稱規(guī)則表達(dá)式(英語:Regular Expression星持,在代碼中常簡寫為regex、regexp 或RE)弹灭,本質(zhì)而言是一種小型的督暂,高度專業(yè)化的編程語言。
Python 自1.5版本起增加了re 模塊穷吮,re 模塊使Python語言擁有全部的正則表達(dá)式功能逻翁。

正則語法表

關(guān)于正則語法表,別想其他的都背過就行了捡鱼。不管你是python還是其他的語言都是一樣的八回,所以背不過就抄到記住為止!這個你背不過,再好的教程看了也沒用缠诅。如何巧記溶浴?我們需要對其進行分類。

  • 開頭結(jié)尾

這一對標(biāo)簽管引,大家都不會陌生...

模式 描述
^ 從整個字符串開頭的地方匹配
$ 從整個字符串的結(jié)尾開始匹配
  • 模糊匹配
模式 描述
. 匹配任意字符士败,除了換行符
re? 重復(fù)匹配?號前面0個或1個由前面的正則表達(dá)式定義的片段,非貪婪方式
re* 重復(fù)匹配*號前面0個或多個的表達(dá)式褥伴。
re+ 重復(fù)匹配+號前面1個或多個的表達(dá)式谅将。
a丨b 匹配a或b
  • 關(guān)于括號
模式 描述
{} 表示匹配"{}"前邊的字符 指定個數(shù)為"{}"里邊的數(shù)值
[] 表示一個字符集,它常被用來指定一個字符類別重慢,字符可以單個列出饥臂,也可以用“-”號分隔的兩個給定字符來表示一個字符區(qū)間
() 分組 將括號中的內(nèi)容 當(dāng)作整體來對待
  • "" 反斜杠的應(yīng)用
模式 描述
\w 匹配字母數(shù)字及下劃線
\W 匹配非字母數(shù)字及下劃線
\s 匹配任意空白字符,等價于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意數(shù)字伤锚,等價于 [0-9].
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束擅笔,如果是存在換行,只匹配到換行前的結(jié)束字符串屯援。
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置猛们。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置狞洋。例如弯淘, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'吉懊。
\B 匹配非單詞邊界庐橙。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'借嗽。
\n, \t, 等. 匹配一個換行符态鳖。匹配一個制表符。等
\1...\9 匹配第n個分組的內(nèi)容恶导。
\10 匹配第n個分組的內(nèi)容浆竭,如果它經(jīng)匹配。否則指的是八進制字符碼的表達(dá)式惨寿。
  • 其他
模式 描述
(?imx) 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 邦泄。只影響括號中的區(qū)域。
(?-imx) 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志裂垦。只影響括號中的區(qū)域顺囊。
(?: re) 類似 (...), 但是不表示一個組
(?imx: re) 在括號中使用i, m, 或 x 可選標(biāo)志
(?-imx: re) 在括號中不使用i, m, 或 x 可選標(biāo)志
(?#...) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達(dá)式蕉拢,以 ... 表示特碳,在當(dāng)前位置成功匹配時成功诚亚,否則失敗。但一旦所含表達(dá)式已經(jīng)嘗試测萎,匹配引擎根本沒有提高亡电;模式的剩余部分還要嘗試界定符的右邊。
(?! re) 前向否定界定符硅瞧。與肯定界定符相反份乒;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時成功
(?> re) 匹配的獨立模式,省去回溯腕唧。
re模塊用法

re.(function)(pattern[, flags])
pattern : 一個字符串形式的正則表達(dá)式
flags : 可選或辖,表示匹配模式,比如忽略大小寫枣接,多行模式等颂暇,具體參數(shù)為:

  1. re.I 忽略大小寫
  2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
  3. re.M 多行模式
  4. re.S 即為 . 并且包括換行符在內(nèi)的任意字符(. 不包括換行符)
  5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
  6. re.X 為了增加可讀性,忽略空格和 # 后面的注釋
  • findall() (即:全部找到,返回的是一個列表)

findall(string[, pos[, endpos]])
參數(shù):

  1. string : 待匹配的字符串但惶。
  2. pos : 可選參數(shù)耳鸯,指定字符串的起始位置,默認(rèn)為 0膀曾。
  3. endpos : 可選參數(shù)县爬,指定字符串的結(jié)束位置,默認(rèn)為字符串的長度添谊。
import re
s = 'helloworld hellobeijing'
ret = re.findall('hello\S+',s)
print(ret)
['helloworld', 'hellobeijing']
  • finditer()

和 findall 類似财喳,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個迭代器返回斩狱。
re.finditer(pattern, string, flags=0)
參數(shù):

參數(shù) 描述
pattern 匹配的正則表達(dá)式
string 要匹配的字符串耳高。
flags 標(biāo)志位,用于控制正則表達(dá)式的匹配方式所踊,如:是否區(qū)分大小寫泌枪,多行匹配等等
  • search() 與 match()

相同點:

  1. 語法:re.search/match(pattern, string, flags=0)

  2. 函數(shù)參數(shù)說明:

參數(shù) 描述
pattern 匹配的正則表達(dá)式
string 要匹配的字符串。
flags 標(biāo)志位秕岛,用于控制正則表達(dá)式的匹配方式工闺,如:是否區(qū)分大小寫,多行匹配等等
  1. 可以使用group(num) 或 groups() 匹配對象函數(shù)來獲取匹配表達(dá)式瓣蛀。
匹配方法 描述
group(num=0) 匹配的整個表達(dá)式的字符串,group() 可以一次輸入多個組號雷厂,在這種情況下它將返回一個包含那些組所對應(yīng)值的元組
groups() 返回一個包含所有小組字符串的元組惋增,從 1 到 所含的小組號
start([group]) 方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數(shù)默認(rèn)值為 0
end([group]) 方法用于獲取分組匹配的子串在整個字符串中的結(jié)束位置(子串最后一個字符的索引+1)改鲫,參數(shù)默認(rèn)值為 0
span([group]) 方法返回 (start(group), end(group)
import re
# re.search
ret = re.search('h..','hello hello world')
print(ret) # 輸出結(jié)果:<_sre.SRE_Match object; span=(0, 3), match='hel'>
ret1 = re.search('h..','hello hello world').group()
print(ret1) # 輸出結(jié)果:hel 只輸出第一個符合條件的結(jié)果

# re.match
ret = re.match('asd','asdhskdjfksji')
print(ret) # 輸出結(jié)果:<_sre.SRE_Match object; span=(0, 3), match='asd'>返回的是一個對象诈皿。
ret1 = re.match('asd','asdhskdjfasdksjiasd').group()
print(ret1) # 輸出結(jié)果:asd 調(diào)用.group()方法林束,只返回匹配的第一個結(jié)果。

不同點:

  1. re.match只匹配字符串的開始稽亏,如果字符串開始不符合正則表達(dá)式壶冒,則匹配失敗,函數(shù)返回None
  2. re.search匹配整個字符串截歉,直到找到一個匹配
# re.search
s = 'helloworld hellobeijing'
ret = re.search('hellob\S+',s)
print(ret)
<re.Match object; span=(11, 23), match='hellobeijing'>

# re.match
s = 'helloworld hellobeijing'
ret = re.match('hellob\S+',s)
print(ret)
None
  • split() 分隔符 對比字符串里邊的split方法胖腾。

split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:

re.split(pattern, string[, maxsplit=0, flags=0])

參數(shù) 描述
pattern 匹配的正則表達(dá)式
string 要匹配的字符串瘪松。
maxsplit 分隔次數(shù)咸作,maxsplit=1 分隔一次,默認(rèn)為 0宵睦,不限制次數(shù)记罚。
flags 標(biāo)志位,用于控制正則表達(dá)式的匹配方式壳嚎,如:是否區(qū)分大小寫桐智,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志
import re
s = 'helloworld hellobeijing'
ret = re.split('hello',s)
print(ret)
['', 'world ', 'beijing']
  • sub() 替換烟馅;類似字符串中的replace()方法说庭。

re.sub用于替換字符串中的匹配項。
語法:
re.sub(pattern, repl, string, count=0, flags=0)
參數(shù):

  1. pattern : 正則中的模式字符串焙糟。
  2. repl : 替換的字符串口渔,也可為一個函數(shù)。
  3. string : 要被查找替換的原始字符串穿撮。
  4. count : 模式匹配后替換的最大次數(shù)缺脉,默認(rèn) 0 表示替換所有的匹配。
import re
s = 'helloworld hellobeijing'
ret = re.sub('hello','goodbye',s)
print(ret)
goodbyeworld goodbyebeijing
  • compile(strPattern[,flag]): 這個方法是Pattern類的工廠方法悦穿,用于將字符串形式的正則表達(dá)式編譯為Pattern對象

compile 函數(shù)用于編譯正則表達(dá)式攻礼,生成一個正則表達(dá)式( Pattern )對象,供 match() 和 search() 這兩個函數(shù)使用栗柒。
語法格式為:
re.compile(pattern[, flags])
參數(shù):
pattern : 一個字符串形式的正則表達(dá)式

  1. flags : 可選礁扮,表示匹配模式,比如忽略大小寫瞬沦,多行模式等太伊,具體參數(shù)為:
  2. re.I 忽略大小寫
  3. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
  4. re.M 多行模式
  5. re.S 即為 . 并且包括換行符在內(nèi)的任意字符(. 不包括換行符)
  6. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
  7. re.X 為了增加可讀性,忽略空格和 # 后面的注釋
import re
pattern = re.compile('he.{3}')
pattern.match(s)
<re.Match object; span=(0, 5), match='hello'>
The End

OK,今天的內(nèi)容就到這里逛钻,如果覺得內(nèi)容對你有所幫助僚焦,可以點擊文章右下角的“在看”。
==歡迎將這篇文章或我的微信公眾號【清風(fēng)Python】分享給更多喜歡python的人曙痘,謝謝芳悲。==

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末立肘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子名扛,更是在濱河造成了極大的恐慌谅年,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肮韧,死亡現(xiàn)場離奇詭異融蹂,居然都是意外死亡,警方通過查閱死者的電腦和手機惹苗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門殿较,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桩蓉,你說我怎么就攤上這事淋纲。” “怎么了院究?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵洽瞬,是天一觀的道長。 經(jīng)常有香客問我业汰,道長伙窃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任样漆,我火速辦了婚禮为障,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘放祟。我一直安慰自己鳍怨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布跪妥。 她就那樣靜靜地躺著鞋喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眉撵。 梳的紋絲不亂的頭發(fā)上侦香,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音纽疟,去河邊找鬼罐韩。 笑死,一個胖子當(dāng)著我的面吹牛污朽,可吹牛的內(nèi)容都是我干的伴逸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼错蝴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颓芭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顷锰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亡问,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官紫,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年州藕,在試婚紗的時候發(fā)現(xiàn)自己被綠了束世。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡床玻,死狀恐怖毁涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锈死,我是刑警寧澤贫堰,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站待牵,受9級特大地震影響其屏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缨该,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一偎行、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰拿,春花似錦蛤袒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至询一,卻和暖如春隐孽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背健蕊。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工菱阵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缩功。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓晴及,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫡锌。 傳聞我的和親對象是個殘疾皇子虑稼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容