正規表示式 re模組

2022-09-04 10:30:14 字數 4643 閱讀 6044

正規表示式:(是一種獨立的語法,與python語言沒有關係)

定義:   一種匹配字串的規則

正規表示式的應用:

可以定製乙個規則:

1.確定/判斷某個字串是否符合規則

2.在一大段字串中找到符合規則的內容

程式領域:

1.登陸註冊網頁的表單 驗證 web開發

3.自動化開發, 日誌分析

幫助學習的測試工具 站長工具

元字元

\d ==        [0-9]                匹配的是乙個數字

\w ==        [0-9a-za-z_]   匹配的是字母數字下劃線

\s  ==        [\n \t 空格]      匹配回車 空格 製表符"tab"

\d                                    匹配非數字

\w                                   匹配回車 空格 製表符

\s                                     匹配非空白

[\d\d], [\s\s], [\w\w]          匹配所有型別字串

^                                      判斷是否是字串開頭,後面跟上要識別的內容

$                                      判斷是否是結尾,前面跟上內容

a|b                                    匹配 | 兩端的字元a 或者字元b 

.                                      匹配除了換行符以外的任意字元  (ps: 在爬蟲中用的比較多)

()                                      分組,可以約束一組字串

字元組 [ ]

在乙個字元的位置上能出現的內容

例: [1cd] 是個範圍, 代表這個位置的字元可以是1,c,d 中的任意乙個

[0-9][a-z][a-z]    匹配三個字元

[2-7abc]              匹配乙個字元, 可以是2-7中的任意數字或者a,b,c中乙個

[0-9a-za-z]        匹配乙個字元

ps: 匹配過程:從頭開始匹配乙個字串,匹配到多少個,就返回多少條結果

量詞:

?                      匹配前乙個字元0次或1次, 可有可無

+                     匹配前乙個字元多次或一次

*                      匹配前乙個字元0次或多次,  ?與+拼在一起

匹配前乙個字元重複n次

匹配前乙個字元n+次, n次或更多次

匹配前乙個字元重複n至m次

貪婪匹配:(正規表示式的預設匹配規則, 用的回溯演算法) 在滿足匹配時,匹配盡可能長的字串,預設情況下,採用貪婪匹配

僅帶有*,+等都是貪婪匹配,也就是盡可能匹配,量詞的後面加  ? 號使其變成惰性匹配

幾種常用的非貪婪匹配:(惰性匹配)

*? 重複任意次,但盡可能少重複

+? 重複1次或更多次,但盡可能少重複

?? 重複0次或1次,但盡可能少重複

? 重複n到m次,但盡可能少重複

? 重複n次以上,但盡可能少重複

訓練:<.*>

<.*?>

.^$        

*+?{}     

[ ] 

分組()?與   或 | [^]

re模組

介紹:正規表示式內建在python中,需要用re模組呼叫出來

pattern......匹配的正規表示式

string.......要匹配的字串。

flags......標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正規表示式修飾符 - 可選標誌

regexobject 正規表示式物件

常用匹配方法:

1. re.findall(pattern,string,flags=0)  *****

把匹配到的字元以列表的形式返回

2. re.search(pattern,string,flags=0)    *****

在string中尋找模式,僅返回乙個值

3. re.match(pattern,string,flags=0)    **

在string的開始處匹配模式    

4. re.sub(pattern, repl, string, count=0, flags=0)    ***

匹配字元並替換並可以控制替換次數

5. re.subn(pattern, repl, string, count=0, flags=0) ***

匹配字元並替換,可以控制替換次數,列印時會返回替換次數

6. re.split(pattern,string,maxsplit=0,flags=0)    ***

匹配到的字元被當作列表的切割符,返回乙個列表

7. re.compile(pattern)    *****  (可以提高時間效率)

根據包含正規表示式的字串 建立乙個regexobject,可以通過regexobject進行re方法操作

8. re.finditer(pattern)  *****  (可以提高空間效率)

返回乙個迭代器  (用for迴圈迭代)

常用方法:

group()  獲取乙個或者多個分組匹配的字串

groups() 獲取全部分組的匹配的結果 放在乙個元組裡,可以只列印索引的結果

轉義符        

應用場景:假如匹配的文字中有"\",在正規表示式中就需要有"\\\\"

在python中有更簡單的方法,在pattern或str前面加上 r 就代表轉義

其他匹配模式:

re.i

忽略大小寫

re.m

多行模式

re.s

點 任意模式

分組() 的應用:

在re.findall  中會優先顯示分組中的內容, 想要取消分組內容優先,需要宣告(?:pattern)

在re.split  中會保留切割符(被切掉的內容)

在re.search  如果有多個分組的pattern時,通過group(n)可以拿到索引對應的匹配到的內容

ret=re.findall(r"\d+(?:\.\d+)|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")  #顯示所有整數

print(ret) #['1', '2', '60', '', '5', '4', '3']

正表示式高階:

分組命名:

(?ppattern) 表示給分組起名字

(?p=name) 表示使用這個分組,匹配到的內容ing該和分組中的內容完全相同 , 通常跟在(?ppattern)的後面使用  

標籤匹配:

ret = re.search("<(?p\w+)>\w+","")

print(ret.group('name')) #結果 :h1

print(ret.group()) #結果 :

ret = re.search(r'<(\w+)>(\w+)',r'wahaha')

print(ret.group()) #wahaha

print(ret.group(1)) #a

print(ret.group(2)) #wahaha

print(ret.group(3)) #b

ret = re.search(r'<(?p\w+)>(?p\w+)',r'wahaha')

print(ret.group()) #wahaha

print(ret.group('tag')) #a

print(ret.group('c')) #wahaha

練習:

import re

st= re.findall('\d+',"adfhauo14145")

print(st)

st1 = re.search('\d+',"adfhauo14145")

if st1:print(st1.group())

st2 = re.match("\d+","1414adfhauo14145")

if st2:print(st2.group())

its = re.subn('\d','w','afajfj134jh41432')

print(its)

its1 = re.finditer('\d+','agfg14414ggh4gh1g4h1g4h1g4h1g4hg')

for r in its1:

print(r.group())

its3 = re.compile('\d+')

f = its3.finditer("fhagf245jh21443")

for r in f:print(r.group())

f1 = re.split("(\d)","ahfv3142bhbh25hb5h2v5")

print(f1)

re 正規表示式模組

import re 預定義字符集 d 數字 0 9 d 非數字 d s 空白字元 空格 t r n f v s 非空白字元 s w 單詞字元 a za z0 9 w 非單詞字元 w 匹配數量 匹配除換行符以外的任何單個字元 匹配前乙個字元0或無限次 盡可能多的匹配 盡可能少的進行匹配前邊的正規表示式...

正規表示式 re模組

re是python中的正規表示式模組,正則也是每個人程式設計之路上必備的基礎技能。這部落格希望即便從來沒接觸過的人看了也會使用正規表示式字元 含義.匹配除了換行符外的任何字元。可以用re.dotall來設定匹配任何字元,包括換行符 丨a丨b 表示正規表示式匹配a或者b 匹配輸入字串開始的位置,如果設...

正規表示式re模組

正規表示式re模組 編譯正規表示式模式,返回乙個物件的模式。可以把那些常用的正規表示式編譯成正規表示式物件,這樣可以提高一點效率。1 compile 格式 re.compile pattern,flags 0 pattern 編譯時用的表示式字串。flags 編譯標誌位,用於修改正規表示式的匹配方式...