1. 程式人生 > >Python中正則表示式常用函式sub,search,findall,split等使用

Python中正則表示式常用函式sub,search,findall,split等使用

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', '國籍:中國']