標籤:預設 特殊 掃描 形式 列表 編譯 模式比對 參數說明 DPoS
Python Regex
Regex是一個特殊的字元序列,它能協助你方便的檢查一個字串是否與某種模式比對。
Python 自1.5版本起增加了re 模組,它提供 Perl 風格的Regex模式。
re 模組使 Python 語言擁有全部的Regex功能。
compile 函數根據一個模式字串和可選的標誌參數產生一個Regex對象。該對象擁有一系列方法用於Regex匹配和替換。
re 模組也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字串做為它們的第一個參數。
本章節主要介紹Python中常用的Regex處理函數。
re.match函數
re.match 嘗試從字串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
函數文法:
re.match(pattern, string, flags=0)
函數參數說明:
pattern 匹配的Regex
string 要匹配的字串。
flags 標誌位,用於控制Regex的匹配方式,如:是否區分大小寫,多行匹配等等。參見:Regex修飾符 - 可選標誌
匹配成功re.match方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來擷取匹配運算式。
import reprint(re.match(‘www‘, ‘www.runoob.com‘).span()) # 在起始位置匹配print(re.match(‘com‘, ‘www.runoob.com‘)) # 不在起始位置匹配
import re line = "Cats are smarter than dogs" matchObj = re.match( r‘(.*) are (.*?) .*‘, line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2)else: print "No match!!"
結果
matchObj.group() : Cats are smarter than dogsmatchObj.group(1) : CatsmatchObj.group(2) : smarter
re.search方法
re.search 掃描整個字串並返回第一個成功的匹配。
函數文法:
re.search(pattern, string, flags=0)
函數參數說明:
pattern 匹配的Regex
string 要匹配的字串。
匹配成功re.search方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來擷取匹配運算式。
group(num=0) 匹配的整個運算式的字串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
import reprint(re.search(‘www‘, ‘www.runoob.com‘).span()) # 在起始位置匹配print(re.search(‘com‘, ‘www.runoob.com‘).span()) # 不在起始位置匹配
以上執行個體運行輸出結果為:
(0, 3)(11, 14)
re.match與re.search的區別
re.match只匹配字串的開始,如果字串開始不符合Regex,則匹配失敗,函數返回None;而re.search匹配整個字串,直到找到一個匹配。
檢索和替換
Python 的 re 模組提供了re.sub用於替換字串中的匹配項。
文法:
re.sub(pattern, repl, string, count=0, flags=0)
參數:
- pattern : 正則中的模式字串。
- repl : 替換的字串,也可為一個函數。
- string : 要被尋找替換的原始字串。
- count : 模式比對後替換的最大次數,預設 0 表示替換所有的匹配。
re.compile 函數
compile 函數用於編譯Regex,產生一個Regex( Pattern )對象,供 match() 和 search() 這兩個函數使用。
文法格式為:
re.compile(pattern[, flags])
參數:
findall
在字串中找到Regex所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
文法格式為:
findall(string[, pos[, endpos]])
參數:
- string : 待匹配的字串。
- pos : 選擇性參數,指定字串的起始位置,預設為 0。
- endpos : 選擇性參數,指定字串的結束位置,預設為字串的長度。
python大法好——Python Regex