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

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

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

re.match()——從一個(gè)字符串的開始位置起匹配正則表達(dá)式,返回match對(duì)象。

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

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

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

re.sub()——在一個(gè)字符串中替換所有匹配正則表達(dá)式的子串,返回替換后的字符串。

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

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

在一個(gè)字符串中搜索匹配正則表達(dá)式的第一個(gè)位置,返回match對(duì)象。

pattern——正則表達(dá)式的字符串或原生字符串表示。

string——待匹配字符串。

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

re.I/re.IGNORECASE——忽略正則表達(dá)式的大小寫,[A-Z]能夠匹配小寫字符。

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

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

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

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

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

下面例子可知,match1因?yàn)閺谋黄ヅ渥址?ABC 123456'的第一個(gè)字符匹配失敗后,直接結(jié)束匹配;match2則因?yàn)楸黄ヅ渥址?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)

將一個(gè)字符串按照正則表達(dá)式匹配結(jié)果進(jìn)行分割,匹配的部分去掉,并作為分割點(diǎn),對(duì)目標(biāo)字符串string進(jìn)行分割,分割出來的子字符串組成一個(gè)列表,該方法即返回這個(gè)列表。

maxsplit參數(shù)——最大分割數(shù),剩余部分作為最后一個(gè)元素輸出。當(dāng)maxsplit=1時(shí),則只匹配第一個(gè)子字符串,并將第一個(gè)子字符串作為分割點(diǎn),將目標(biāo)字符串string分割為兩個(gè)子字符串。

其余參數(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個(gè)子字符串"123456","123456"之后的剩余部分作為一個(gè)整體填進(jìn)列表里。
Out[31]: ['ABC', ' TSU987654']

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

搜索字符串,返回一個(gè)匹配結(jié)果的迭代類型,每個(gè)迭代類型都是match對(duì)象。參數(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)

在一個(gè)字符串string中,用repl替換所有匹配正則表達(dá)式pattern的子串,返回替換后的字符串。

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

Re庫(kù)的兩種等價(jià)用法

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

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

方法二:面向?qū)ο笥梅?,一次編譯后可以多次操作。

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

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

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

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

regex.search()

regex.match()

regex.findall()

regex.split()

regex.finditer()

regex.sub()

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

To be continued.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,197評(píng)論 0 13
  • #首先,python中的正則表達(dá)式大致分為以下幾部分: 元字符 模式 函數(shù) re 內(nèi)置對(duì)象用法 分組用法 環(huán)視用法...
    mapuboy閱讀 1,706評(píng)論 0 51
  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配,如果開頭沒有則無re...
    BigJeffWang閱讀 7,577評(píng)論 0 99
  • 搞懂Python 正則表達(dá)式用法 Python 正則表達(dá)式 正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一...
    廈熱閱讀 1,772評(píng)論 0 2
  • 在前面我們已經(jīng)搞定了怎樣獲取頁(yè)面的內(nèi)容,不過還差一步,這么多雜亂的代碼夾雜文字我們?cè)鯓影阉崛〕鰜碚砟兀肯旅婢烷_...
    AromaMuzi閱讀 363評(píng)論 0 0

友情鏈接更多精彩內(nèi)容