python 模組之re正規表示式

2022-07-14 18:21:09 字數 4038 閱讀 1771

簡介:

正規表示式本身是乙個小型的、高度專業化的程式語言,而在python中,通過內嵌整合re模組,我們可以通過直接呼叫來實現正則匹配。

正規表示式基礎知識:

--普通字元

匹配自身 abc ----abc

--元字元

. :匹配任何字元(\n)換行符除外

例:a.a -----aba

\ :轉義字元

例:a\tb ---a b

* :匹配前乙個字元0或多次

例:a*b ----aaaab;b

+ :匹配前乙個字元1次或多次

例:a+b ----aaaab;ab

? :匹配乙個字元0次或1次

例:a?b ---b;ab

^ :匹配字串開頭,多行匹配每一行開頭

例:^ab ---ab

$ :匹配字串末尾,多行匹配每一行末尾

例:ab$ ---ab;cb

reg1 | reg2 :匹配正規表示式reg1或reg2

例:foo | bar ---foo;bar

{} : a匹配字元m次,a匹配字元m至n次,若省略n,則匹配m至無限次

例:ab ---aab

:字符集,對應的位置可以是字符集中任意字元。字符集中的字元可以逐個列出,也可以給出範圍,如[^abc]表示取反,即非abc.

注:所有特殊字元在字符集中都失去其原有的特殊含義。用\反斜槓轉義恢復特殊含義。

例:a[bcd]e ---abcde

() :最基本的組是由一對圓括號括起來的正則式。

例:(abc)a(2|4)d ---abcabca4d

--特殊字元

\d :數字1~9

例:a\db ---a1b

\d:非數字[^\d]

例:a\dc ----abc

\s:匹配任意空白字元[ \t\r\n\f\v]

例:a\sb ---a b

\s:非空白字元[^\s]

例:a\sb ---abc

\w:匹配包括下劃線在內的任意字元[a-za-z0-9_]

例:a\wc ---abc

\w:匹配非單詞字元[^a-za-z0-9_]

例:a\wb ---a b

\a:僅匹配字串開頭,同^

例:\aabc ---abc

\z:僅匹配字串末尾,同$

例:abc\z ----abc

\b:匹配\w和\w之間,即匹配單詞邊界匹配乙個單詞邊界,也就是指單詞和空格間的位置。

例:』er\b『 可以匹配』never『 中的』er『,但不能匹配』verb『中的』er『

\b:[^\b]

例:a\bbc ---abc

正規表示式的常用函式:

match和search一旦匹配成功,就是乙個match object物件,而match object物件有以下方法:

group():返回被re匹配的字串

可以一次輸入多個組號,對應組號匹配的 字串

start():返回匹配開始的位置

end():返回匹配結束的位置

spend():返回乙個元組包含匹配(開始,結束)的位置

1、compile()

編譯正規表示式模式,返回乙個物件的模式。(可以把那些常用的正規表示式編譯成正規表示式物件,這樣可以提高一點效率)

re.compile(pattern,flags=0)

pattern:編譯時用的表示式字串。

flags:編譯標誌位,用於修正正規表示式的匹配方式,如:是否區分大小寫,多行匹配等,常用的flags有:

re.s(dotall):使『.』特殊字元匹配任何字元,包括換行;如果沒有此標誌,『.』將匹配任何內容除換行符。

re.i(ignorecase):使匹配對大小寫不敏感。

re.l(locale):做本地化識別(locale-aware)匹配

re.m(multiline):多行匹配,影響^和$

re.x(verbose):該標誌通過給予更靈活的格式以便將正規表示式寫的更易於理解

re.u:根據unicode字符集解析字元,這個標識影響\w,\w,\b,\b

2、match()

決定re是否在字串剛開始的位置匹配。

注:這個方法並不是完全匹配。當pattern結束時若string還有剩餘字元,仍然視為成功。想要完全匹配,可以在表示式末尾加上邊界匹配符『$』

格式:re.match(pattern,string,flags=0)

例:print(re.match('com','comwww.runcomoob').group())

print(re.match('com','comwww.runcomoob',re.i).group())

>>com

>>com

3、search()

re.search函式會在字串內查詢模式匹配,只要找到第乙個匹配然後返回,如果字串沒有匹配,則返回none

格式:re.search(pattern,string,flags=0)

例:print(re.search('\dcom','4com5com').group())

>>4com

4,findall()

re.findall遍歷匹配,可以獲取字串中所有匹配的字串,返回乙個列表。

格式:re.findall(pattern,string,flags=0)

例1:p=re.compile(r'\d+')

print(p.findall('h32h3jh2uhr23'))

>>['32', '3', '2', '23']

5、finditer()

搜尋string,返回乙個順序訪問每乙個匹配結果(match)物件的迭代器。找到re匹配的所有字串,並把它們作為乙個迭代器返回。

格式:re.finditer(pattern,string,flags=0)

例:iter=re.finditer(r'\d+','12gjh232jkg34')

for i in iter:

print(i)

print(i.group())

print(i.span())

#返回迭代器物件;匹配數值;位置

>><_sre.sre_match object; span=(0, 2), match='12'>

12(0, 2)

>><_sre.sre_match object; span=(5, 8), match='232'>

232(5, 8)

>><_sre.sre_match object; span=(11, 13), match='34'>

34(11, 13)

6、split()

按照能夠匹配的字串string分割後返回列表。

可以使用re.split來分割字串,如:re.split(r'\s+',text);將字串按空格分割成乙個列表。

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

例:print(re.split('\d+','ont1two2three3four4five5',3))

>>['ont', 'two', 'three', 'four4five5']

7、sub()

使用re替換string中每個匹配的字串返回後的值。

格式:re.sub(pattern,repl,string,count)

例:text='ont1two2three3four4five5'

print(re.sub(r'\d+',' ',text))

>>ont two three four five

8、subn()

返回替換次數

格式:subn(pattern,repl,string,count=0,flags=0)

例:print(re.subn(r'\d',' ','ont1two2three3four4five5'))

>>('ont two three four five ', 5)

python常用模組之re模組(正則)

python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...

python常用模組之 正則re模組

python中使用正規表示式的步驟 1.匯入re模組 import re 2.初始化乙個regex物件 re.compile 3.剛剛建立的regex物件呼叫search方法進行匹配,返回要給march物件 4.剛剛的march物件呼叫group方法,展示匹配到的字串 下面例子的知識點 對正規表示式...

Python之re模組正規表示式

re模組用於對python的正規表示式的操作 字元 匹配除換行符以外的任意字元 w匹配字母或數字或下劃線或漢字 s匹配任意空白符 b匹配單詞的開始或結束 匹配字串的開始 匹配字串的結束 次數 重複零次或多次 重複一次或多次 重複零次或者一次 重複n次 重複n次或更多次 重複n到m次 出現一串類似於這...