Python中正則表示式常用函式sub,search,findall,split等使用
阿新 • • 發佈:2018-11-04
1.原生字串r
python中字串前面加上 r 表示原生字串,不會轉義。
與大多數程式語言相同,正則表示式裡使用"\"作為轉義字元
,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正則表示式裡將需要4個反斜槓"\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正則表示式裡轉義成一個反斜槓。
# 匯入re模組 import re vrgs = "c:\\a\\b\\c" print(vrgs) #c:\a\b\c python中使用print列印,會自動將\轉義。 ret = re.match("c:\\\\",vrgs).group() print(ret) #c:\,其實結果是ret=c:\\ ret = re.match(r"c:\\a",vrgs).group() #使用r不轉義匹配 print(ret) #c:\a
2.re.search 匹配函式的使用
re.search()掃描整個字串並返回第一個成功的匹配。匹配成功re.search方法返回一個匹配的物件,否則返回None。可以使用group(num) 或 groups() 匹配物件函式來獲取匹配表示式的結果
函式語法:re.search(pattern, string, flags=0) ;pattern是正則,string字串,flags是修飾符
# 匯入re模組 import re ret = re.search(r"\d+", "您是第:18434 瀏覽334343者") #只匹配一個第一個結果即返回 print(ret.group()) #18434 ret = re.search("[A-Za-z0-9]{2,8}","中國a2Z方防守打法") print(ret.group()) #a2Z
3.findall匹配函式使用
在字串中找到正則表示式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。
語法格式為:findall(string[, pos[, endpos]])
# 匯入re模組 import re ret = re.findall(r"[A-Za-z]", "中國人aDFD23哈哈, 這是13BB34呵呵,啦啦啦zdfasd嘎嘎") print(ret) ''' ['a', 'D', 'F', 'D', 'B', 'B', 'z', 'd', 'f', 'a', 's', 'd'] '''
4.sub函式的使用:將匹配到的資料進行替換
語法格式:re.sub(pattern, repl, string, count=0),返回值是修改後的結果字串
- pattern : 正則中的模式字串。
- repl : 替換的字串,也可為一個函式。
- string : 要被查詢替換的原始字串。
# 匯入re模組
import re
ret = re.sub(r"\d+", '999999', "您是第:143434 位瀏覽者")
print(ret) #您是第:999999 位瀏覽者
ret = re.sub(r"bb","AA","哈哈bb是的,嘎嘎bb的,呵呵呵bb",2) #替換2次
print(ret) #哈哈AA是的,嘎嘎AA的,呵呵呵bb
=============sub的替換掉引數是一個函式============================================
def sumNum(temp):
strNum = temp.group()
sumNum = int(strNum)+100
return str(sumNum)
ret = re.sub(r"\d+", sumNum, "A=100,B=200,C=300")
print(ret) #A=200,B=300,C=400
5.split函式使用
split 方法按照能夠匹配的子串將字串分割後返回列表
它的使用形式如下:re.split(pattern, string[, maxsplit=0, flags=0]),分隔次數maxsplit=1 分隔一次,預設為 0,不限制次數。
import re
ret = re.split(r":| ","姓名:張三 33 國籍:中國")
print(ret) #['姓名', '張三', '33', '國籍:中國']