Python正則re模塊使用步驟及原理解析
python中使用正則表達式的步驟:
1.導入re模塊:import re
2.初始化一個Regex對象:re.compile()
3.剛剛創建的Regex對象調用search方法進行匹配,返回要給March對象
4.剛剛的March對象調用group方法,展示匹配到的字符串
下面例子的知識點:
對正則表達式分組用:(),正則里的分組計數從1開始,不是從0,切記~~
group(數字):去對應的分組的值 groups():返回所有分組的元組形式d表示一個數字
regex_obj = re.compile(r’(ddd)-(ddd)-(dddd)’)match_obj = regex_obj.search(’我司電話:035-411-1234’)result1 = match_obj.group(1)result2 = match_obj.group(2)result3 = match_obj.group(3)print(result1)print(result2)print(result3)result4 = match_obj.group()print(result4)result5 = match_obj.groups()print(result5)
執行結果:
0354111234035-411-1234(’035’, ’411’, ’1234’)
補充知識點:w表示一個單詞,s表示一個空格
regex_obj = re.compile(r’(dwd)-(ddd)-(dddd)’)match_obj = regex_obj.search(’我司電話:0a5-411-1234’)result = match_obj.group(1)print(result)regex_obj = re.compile(r’(dwd)-(ddd)-(dddd)’)match_obj = regex_obj.search(’我司電話:0哈5-411-1234’)result = match_obj.group(1)print(result)regex_obj = re.compile(r’(dsd)-(ddd)-(dddd)’)match_obj = regex_obj.search(’我司電話:0 5-411-1234’)result = match_obj.group(1)print(result)
執行結果:
0a50哈50 5
| 或:
regex_obj = re.compile(r’200|ok|successfully’)match_obj1 = regex_obj.search(’vom get request and stored successfully’)result1 = match_obj1.group()print(result1)match_obj2 = regex_obj.search(’vom get request,response 200 ok’)result2 = match_obj2.group()print(result2)match_obj3 = regex_obj.search(’vom get request,response ok 200’)result3 = match_obj3.group()print(result3)
執行結果:
successfully200ok
注意:如果search返回的March對象只有一個結果值的話,不能用groups,只能用group
regex_obj = re.compile(r’200|ok|successfully’)match_obj1 = regex_obj.search(’vom get request and stored successfully’)result2 = match_obj1.groups()print(result2)result1 = match_obj1.group()print(result1)
執行結果:
()successfully
? :可選匹配項
+ :1次 或 n次 匹配
* :*前面的字符或者字符串匹配 0次、n次
注意:*前面必須要有內容
regex_obj = re.compile(r’(haha)*,welcome to vom_admin system’) 指haha這個字符串匹配0次或者多次
regex_obj = re.compile(r’(ha*),welcome to vom_admin system’) 指ha這個字符串匹配0次或者多次
. : 通配符,匹配任意一個字符
所以常常用的組合是:.*
regex_obj = re.compile(r’(.*),welcome to vom_admin system’)match_obj1 = regex_obj.search(’Peter,welcome to vom_admin system’)name = match_obj1.group(1)print(name)
執行結果:
Peter
{} : 匹配特定的次數
里面只寫一個數字:匹配等于數字的次數
里面寫{3,5}這樣兩個數字的,匹配3次 或 4次 或 5次,按貪心匹配法,能滿足5次的就輸出5次的,沒有5次就4次,4次也沒有才是3次
regex_obj = re.compile(r’((ha){3}),this is very funny’)match_obj1 = regex_obj.search(’hahahaha,this is very funny’)print('{3}結果',match_obj1.group(1))regex_obj = re.compile(r’((ha){3,5}),this is very funny’)match_obj1 = regex_obj.search(’hahahaha,this is very funny’)print('{3,5}結果',match_obj1.group(1))
執行結果:
{3}結果 hahaha{3,5}結果 hahahaha
findall():返回所有匹配到的字串的列表
regex_obj = re.compile(r’ddd’)match_obj = regex_obj.findall(’我是101班的,小李是103班的’)print(match_obj)regex_obj = re.compile(r’(ddd)-(ddd)-(dddd)’)match_obj = regex_obj.findall(’我家電話是123-123-1234,我公司電話是890-890-7890’)print(match_obj)
打印結果:
[’101’, ’103’][(’123’, ’123’, ’1234’), (’890’, ’890’, ’7890’)]
[]:創建自己的字符集:
[abc]:包括[]內的字符
[^abc]:不包括[]內的所有字符
也可以使用:[a-zA-Z0-9]這樣簡寫
regex_obj = re.compile(r’[!@#$%^&*()]’)name = input('請輸入昵稱,不含特殊字符:')match_obj = regex_obj.search(name)if match_obj: print('昵稱輸入不合法,包含了特殊字符:', match_obj.group())else: print('昵稱有效')
執行結果:
請輸入昵稱,不含特殊字符:*h昵稱輸入不合法,包含了特殊字符: *
^:開頭
$:結尾
regex_obj = re.compile(r’(^[A-Z])(.*)’)name = input('請輸入昵稱,開頭必須大寫字母:')match_obj = regex_obj.search(name)print(match_obj.group())
執行結果:
請輸入昵稱,開頭必須大寫字母:A1234A1234
sub():第一個參數為要替換成的,第二個參數傳被替換的,返回替換成功后的字符串
regex_obj = re.compile(r’[!@#$%^&*()]’)match_obj = regex_obj.sub(’嘿’,’haha,$%^,hahah’)print(match_obj)
執行結果:
haha,嘿嘿嘿,hahah
補充一下正則表達式的表,正則太復雜了,要常看常用才能熟練
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章:
