python學習-第十二週:正則表示式
阿新 • • 發佈:2020-09-12
python學習-第十二週:正則表示式簡介
Re 正則表示式
正則表示式,就是使用字元,轉義字元和特殊字元組成一個規則,
使用這個規則對文字的內容完成一個搜尋或匹配或替換的功能。
正則表示式的組成
普通字元: 大小寫字母,數字,符號 等
轉義字元:\w \W \d \D \s \S 等
特殊字元:. * ? + ^ $ [] {} () 等
匹配模式:I U 。。。
普通字元
# 正則表示式的規則定義 import re # 待搜尋字串 vars = 'ilove you' # 正則表示式 reg = 'love' # 呼叫正則函式 res = re.search(reg,vars).group()
轉義字元
# 轉義字元 \w \W \d \D \s \S ...
reg = '\w' # 代表 單個 字母、數字、下劃線
reg = '\W' # 代表 單個 非 字母、數字、下劃線
reg = '\d' # 代表 單個 數字
reg = '\D' # 代表 單個 非數字
reg = '\s' # 代表 單個 空格符或製表符
reg = '\S' # 代表 單個 非 空格符或製表符
reg = '\w\w\w\w\d' # 組合使用
特殊字元
# 特殊字元 . * + ? {} [] () ^ $ reg = '.' # . 代表 單個的 任意字元 除了換行符之外 reg = '\w*' # * 代表匹配次數 任意次數 reg = '\w+' # + 代表匹配次數 至少要求匹配一次 reg = '\w+?' # ? 拒絕貪婪,就是前面的匹配規則只要達成則返回 reg = '\w{5}' # {} 代表匹配次數,{4} 一個數字時,表示必須匹配的次數 reg = '\w{2,4}' # {} 代表匹配次數,{2,5} 兩個數字時,表示必須匹配的區間次數 reg = '[A-Z,a-z,0-9,_]' # [] 代表字元的範圍 [A-Z,a-z,0-9,_] 效果等同 \w reg = '\w+(\d{4})(\w+)' # () 代表子組,括號中的表示式首先作為整個正則的一部分,另外會把符合小括號中的內容單獨提取一份 ''' *號的特點: 如果使用*號,那麼在匹配的開始處如果符合要求, 則按照規則一直向後匹配,直到不符合匹配規則結束並把前面符合的資料返回 如果在匹配的開始處就不符合要求,則直接返回,匹配到的次數為0 '''
匹配模式
- re.U:在此模式下,\w、\d、\s等字元組簡記法的匹配規則會發生改變,比如\w能匹配Unicode中的“單詞字元”,包括中文字元,它有對應的模式修飾符u
- re.A:讓\d、\w等字元組簡記法恢復到ASCII匹配規則,它有對應的模式修飾符a
re模組相關函式
re.match() 函式
- 從頭開始匹配
- 要麼第一個就符合要求,要麼不符合
- 匹配成功則返回Match物件,否則返回None
- 可以使用group()方法獲取返回的資料
- 可以使用span()方法獲取匹配的資料的下標區間
re.search() 函式
- 從字串開頭到結尾進行搜尋式匹配
- 匹配成功則返回Match物件,否則返回None
- 可以使用group()方法獲取返回的資料
- 可以使用span()方法獲取匹配的資料的下標區間
search() 和 match() 方法的區別:
match()方法是從字串的開頭進行匹配,如果開始就不符合正則的要求,則匹配失敗,返回None
search()方法是從字串的開始位置一直搜尋到字串的最後,如果在整個字串中都沒有匹配到,則失敗,返回None
re.findall()
- 按照正則表示式的規則在字元中匹配所有符合規則的元素,結果返回一個列表,如果沒有找到則返回空列表
re.finditer()
- 按照正則表示式的規則在字元中匹配所有符合規則的元素,返回一個迭代器
re.sub() 搜尋替換
- 按照正則表示式的規則,在字串中找到需要 被替換的字串,完成一個替換
- 引數:
- pattern: 正則表示式的規則,匹配需要被替換的字串
- repl: 替換後的字串
- string: 被替換的原始字串
compile()
可以直接將正則表示式定義為 正則物件,使用正則物件直接操作
示例:
import re
# 定義字串
varstr = 'ak555nk523'
# 找到連續三個數字
reg = '\d{3}'
res = re.findall(reg,varstr) #['555', '523']
res = re.finditer(reg,varstr) #[<re.Match object; span=(3, 6), match='555'>, <re.Match object; span=(9, 12), match='523'>]
# 找到數字,替換成字串
res = re.sub(reg,'AAA',varstr) #['a', 'k', 's', 'A', 'A', 'A', 'n', 'k', 'a', 'A', 'A', 'A']
# 直接定義正則表示式物件
reg = re.compile('\d{3}')
# 直接使用建立的正則物件,去呼叫對應的方法或函式
res = reg.findall(string=varstr) #['555', '523']
# 匹配手機號
varstr1 = '17610105211'
varstr2 = '1761010521a'
reg = '^1\d{10}$' # ^ 代表開頭 $ 代表結尾
res = re.findall(reg,varstr1) #['17610105211']
res = re.findall(reg,varstr2) #[]
# 可以正確識別varstr1為手機號
正則部分歸納完畢,下週總結面向物件程式設計OOP相關內容,下週見~