Python隨筆15:Python正則表達式基礎(chǔ)(2):Re庫的基本使用

Re庫主要功能函數(shù)一覽

re.search()——在一個字符串中搜索匹配正則表達式的第一個位置趴酣,返回match對象。

re.match()——從一個字符串的開始位置起匹配正則表達式坑夯,返回match對象岖寞。

re.findall()——搜索字符串,以列表類型返回全部能匹配的子串柜蜈。

re.split()——將一個字符串按照正則表達式匹配結(jié)果進行分割仗谆,返回列表類型。

re.finditer()——搜索字符串淑履,返回一個匹配結(jié)果的迭代類型隶垮,每個迭代元素是match對象。

re.sub()——在一個字符串中替換所有匹配正則表達式的子串秘噪,返回替換后的字符串狸吞。

Re庫主要功能函數(shù)詳解

re.search(pattern, string, flags=0)

在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象。

pattern——正則表達式的字符串或原生字符串表示蹋偏。

string——待匹配字符串便斥。

flags——正則表達式使用時的控制標(biāo)記。常用的標(biāo)記有三種:

re.I/re.IGNORECASE——忽略正則表達式的大小寫威始,[A-Z]能夠匹配小寫字符枢纠。

re.M/re.MULTILINE_正則表達式中的^操作符能夠?qū)⒔o定字符串的每行當(dāng)作匹配開始。

re.S/re.DOTALL——正則表達式中的.操作符能夠匹配所有字符黎棠,默認(rèn)匹配除換行符\n之外的所有字符(無法匹配換行符\n)晋渺。

import re
match = re.search(r'[1-9]\d{5}', 'ABC 123456')
if match:  
#if match語句在這里是為了判斷match是否為空,避免系統(tǒng)報錯脓斩。
    print(match.group(0))
<<<123456

re.match(pattern, string, flags=0)

從被匹配字符串的開始位置index=0處匹配正則表達式些举,返回match對象。如果index=0處匹配不能完成俭厚,則立即結(jié)束匹配户魏,返回None。該函數(shù)里面的三個參數(shù)pattern, string, flags與re.search()函數(shù)相同挪挤。

下面例子可知叼丑,match1因為從被匹配字符串'ABC 123456'的第一個字符匹配失敗后,直接結(jié)束匹配扛门;match2則因為被匹配字符串'123456 ABC'是匹配的鸠信,因此可以成功輸出。

import re

match1 = re.match(r'[1-9]\d{5}', 'ABC 123456')
if match1: 
    print(match1.group(0))
else:
    print("match1匹配不成功论寨!")
    
match2 = re.match(r'[1-9]\d{5}', '123456 ABC')
if match2:
    print(match2.group(0))
else:
    print("match2匹配不成功星立!")

<<<
match1匹配不成功!
123456
<<<

re.findall(pattern, string, flags=0)

搜索字符串葬凳,以列表類型返回全部能匹配的子字符串绰垂。參數(shù)同上。

import re
l = re.findall(r'[1-9]\d{5}', 'ABC123456 TSU987654')
print(l)

<<<['123456', '987654']

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

將一個字符串按照正則表達式匹配結(jié)果進行分割火焰,匹配的部分去掉劲装,并作為分割點,對目標(biāo)字符串string進行分割昌简,分割出來的子字符串組成一個列表占业,該方法即返回這個列表。

maxsplit參數(shù)——最大分割數(shù)纯赎,剩余部分作為最后一個元素輸出谦疾。當(dāng)maxsplit=1時,則只匹配第一個子字符串犬金,并將第一個子字符串作為分割點念恍,將目標(biāo)字符串string分割為兩個子字符串碎紊。

其余參數(shù)同上。

re.split(r'[1-9]\d{5}', 'ABC123456 TSU987654')
Out[30]: ['ABC', ' TSU', '']

re.split(r'[1-9]\d{5}', 'ABC123456 TSU987654', maxsplit=1)  #只匹配第1個子字符串"123456"樊诺,"123456"之后的剩余部分作為一個整體填進列表里仗考。
Out[31]: ['ABC', ' TSU987654']

re.finditer(patter, string, flags=0)

搜索字符串,返回一個匹配結(jié)果的迭代類型词爬,每個迭代類型都是match對象秃嗜。參數(shù)同上。

import re
for m in re.finditer(r'[1-9]\d{5}', 'ABC123456 TSU987654'):
    if m:
        print(m.group(0))

<<<
123456
987654
<<<

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

在一個字符串string中顿膨,用repl替換所有匹配正則表達式pattern的子串锅锨,返回替換后的字符串。

import re
re.sub(r'[1-9]\d{5}', ':zipcode', 'ABC123456 XYZ987654')
Out[4]: 'ABC:zipcode XYZ:zipcode'

Re庫的兩種等價用法

用法一:函數(shù)式用法恋沃,一次性操作必搞。

rst = re.search(r'[1-9'\d{5}',  'ABC 123456')

方法二:面向?qū)ο笥梅ǎ淮尉幾g后可以多次操作囊咏。

pat = re.compile(r'[1-9]'\d{5})
rst = pat.search('ABC 123456')

regex = re.compile(patter, flags=0)函數(shù)

將正則表達式的字符串形式編譯成正則表達式對象恕洲。參數(shù)的意思同上。

使用re.compile()函數(shù)以后梅割,就可以直接使用前面的一些方法了:

regex.search()

regex.match()

regex.findall()

regex.split()

regex.finditer()

regex.sub()

上述方法的功能同Re庫主要功能函數(shù)一覽中的同名方法是一致的霜第,相比后者來說,regex.search()等方法不需要里面的參數(shù)了户辞。

To be continued.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泌类,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子底燎,更是在濱河造成了極大的恐慌刃榨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件双仍,死亡現(xiàn)場離奇詭異枢希,居然都是意外死亡,警方通過查閱死者的電腦和手機殊校,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門晴玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來读存,“玉大人为流,你說我怎么就攤上這事∪貌荆” “怎么了敬察?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尔当。 經(jīng)常有香客問我莲祸,道長蹂安,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任锐帜,我火速辦了婚禮田盈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缴阎。我一直安慰自己允瞧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布蛮拔。 她就那樣靜靜地躺著述暂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪建炫。 梳的紋絲不亂的頭發(fā)上畦韭,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音肛跌,去河邊找鬼艺配。 笑死,一個胖子當(dāng)著我的面吹牛衍慎,可吹牛的內(nèi)容都是我干的妒挎。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼西饵,長吁一口氣:“原來是場噩夢啊……” “哼精肃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骚灸,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤公你,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驯嘱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镶苞,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年鞠评,在試婚紗的時候發(fā)現(xiàn)自己被綠了茂蚓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡剃幌,死狀恐怖聋涨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情负乡,我是刑警寧澤牍白,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站抖棘,受9級特大地震影響茂腥,放射性物質(zhì)發(fā)生泄漏狸涌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一最岗、第九天 我趴在偏房一處隱蔽的房頂上張望帕胆。 院中可真熱鬧,春花似錦般渡、人聲如沸惶楼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歼捐。三九已至,卻和暖如春晨汹,著一層夾襖步出監(jiān)牢的瞬間豹储,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工淘这, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剥扣,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓铝穷,卻偏偏與公主長得像钠怯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曙聂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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

  • re模塊手冊 本模塊提供了和Perl里的正則表達式類似的功能晦炊,不關(guān)是正則表達式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,012評論 0 13
  • #首先宁脊,python中的正則表達式大致分為以下幾部分: 元字符 模式 函數(shù) re 內(nèi)置對象用法 分組用法 環(huán)視用法...
    mapuboy閱讀 1,618評論 0 51
  • Python中的正則表達式(re) import rere.match #從開始位置開始匹配断国,如果開頭沒有則無re...
    BigJeffWang閱讀 7,093評論 0 99
  • 搞懂Python 正則表達式用法 Python 正則表達式 正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一...
    廈熱閱讀 1,585評論 0 2
  • 在前面我們已經(jīng)搞定了怎樣獲取頁面的內(nèi)容榆苞,不過還差一步稳衬,這么多雜亂的代碼夾雜文字我們怎樣把它提取出來整理呢?下面就開...
    AromaMuzi閱讀 313評論 0 0