python常用模組之 正則re模組

2022-02-14 01:22:52 字數 4342 閱讀 6066

python中使用正規表示式的步驟:

1.匯入re模組:import re

2.初始化乙個regex物件:re.compile()

3.剛剛建立的regex物件呼叫search方法進行匹配,返回要給march物件

4.剛剛的march物件呼叫group方法,展示匹配到的字串

下面例子的知識點:

對正規表示式分組用:(),正則裡的分組計數從1開始,不是從0,切記~~

group(數字):去對應的分組的值

groups():返回所有分組的元組形式

\d表示乙個數字

執行結果:

035

4111234

035-411-1234

('035', '411', '1234')

補充知識點:\w表示乙個單詞,\s表示乙個空格

regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')

result = match_obj.group(1)

print(result)

regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')

result = match_obj.group(1)

print(result)

regex_obj = re.compile(r'(\d\s\d)-(\d\d\d)-(\d\d\d\d)')

result = match_obj.group(1)

print(result)

執行結果:

0a5

0哈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)

執行結果:

successfully

200ok

注意:如果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次 或 4次 或 5次,按貪心匹配法,能滿足5次的就輸出5次的,沒有5次就4次,4次也沒有才是3次

regex_obj = re.compile(r'((ha)),this is very funny')

match_obj1 = regex_obj.search('hahahaha,this is very funny')

print("結果",match_obj1.group(1))

regex_obj = re.compile(r'((ha)),this is very funny')

match_obj1 = regex_obj.search('hahahaha,this is very funny')

print("結果",match_obj1.group(1))

執行結果:

結果 hahaha

結果 hahahaha

findall():返回所有匹配到的字串的列表

regex_obj = re.compile(r'\d\d\d')

match_obj = regex_obj.findall('我是101班的,小李是103班的')

print(match_obj)

regex_obj = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')

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())

執行結果:

請輸入暱稱,開頭必須大寫字母:a1234

a1234

sub():第乙個引數為要替換成的,第二個引數傳被替換的,返回替換成功後的字串

regex_obj = re.compile(r'[!@#$%^&*()]')

match_obj = regex_obj.sub('嘿','haha,$%^,hahah')

print(match_obj)

執行結果:

haha,嘿嘿嘿,hahah
補充一下正規表示式的表,正則太複雜了,要常看常用才能熟練

python常用模組之re模組(正則)

python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...

Python常用模組之re

2 python正則常用模組 2.1 re.match與re.search 函式說明 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.search 掃瞄整個字串並返回第乙個成功的匹配。函式語法 re.match pattern,st...

Python 正則re模組之findall 詳解

1.先說一下findall 函式的兩種表示形式 import re kk re.compile r d kk.findall one1two2three3four4 1,2,3,4 注意此處findall 的用法,可傳兩個引數 kk re.compile r d re.findall kk,one1...