re模組正規表示式

2022-07-30 05:15:10 字數 3813 閱讀 3790

什麼是正規表示式?

正規表示式是乙個特殊的字串行,它能夠幫助你方便的檢查乙個字串是否能夠與某種模式匹配。

re的匹配語法有以下幾種

1、re.match 從頭開始匹配 注:只有第乙個字元匹配才會返回值,如果第乙個字元不匹配則返回none

2、re.search 匹配包含(全域性匹配) 注:當存在多個匹配到的字元時,只返回第乙個。例如:s = 'ad1jkn3nj'   re.search('[0-9]', s) 返回

3、re.findall 把所有匹配到的字元放到以列表中的元素返回

4、re.split     以匹配到的字元當作列表分隔符,(注:maxsplit為替換次數)

1

import

re2 s = '

31-213*312/1321+1321'3

print(re.split("

[-*/+]

", s, maxsplit=2)) #以-*/+分割數字;是包含的意思 結果 ['31', '213', '312/1321+1321']

5、re.sub      匹配字元並替換(注:count為替換次數)

1

import

re2 s = '

dsa\dsakl1321aa|d21321darewr$d1321afds'3

print(re.sub('

\d+', "

=", s, count=2)) #

把數字替換成"=" 結果 dsa\dsakl=aa|d=darewr$d1321afds

6、re.fullmatch 全部匹配;整個字串全部匹配成功就返回re object,否則返回none 例如:re.fullmatch('ads', 'asd')  返回re object

7、re.compile  與re.fullmatch 類似。速度相對re.fullmatch 快一點。(先儲存到記憶體裡然後直接呼叫,re.fullmatch的話每次都要匹配,影響效率)

1

import

re2 pattern = re.compile("

\\w+@\\w+\\.(com|cn|edu)")

3 result = pattern.fullmatch('

[email protected]')

4print(result)print(result) #

結果

常用的表示式規則

'.'    預設匹配除\n之外的任何乙個字元,例如:re.search('.', 'abca') 結果 注:當'..'時,返回ab,若指定flag dotall,則匹配任意字元,包括換行。

'^'      匹配字元開頭,例如:re.search('^ab', 'abca') 結果 ,若指定flags multiline,這種也可以匹配上(r''^a'', ''\nabc\neee'', flags=re.multiline)

'$'      匹配字元結尾,例如:re.search('b$', 'ab') 結果 ,若指定flags multiline,re.search('foo.$', 'foo1\nfoo2\n', re.multiline).group() 會匹配到foo1

'*'    匹配*號前的字元0次或多次,re.search('a*' , 'aaabhdjhbas')  結果'aaa'

'+'      匹配前乙個字元1次或多次,re.findall('ab+', 'ab+cd+abb+bba') 結果['ab', 'abb']

'?'      匹配前乙個字元1次或0次,re.search('b?', 'bkevinb').group() 匹配到第乙個b,當第乙個字元不是b時匹配為0次

''          匹配前乙個字元m次(注:匹配的字元必須連在一起),re.search('b', 'kevinbbbb6').group() 匹配到 'bbb'

''   匹配前乙個字元n到m次,re.findall('ab', "abb abcabbcbbb") 結果['abb', 'ab', 'abb']

'|'    匹配|左或|右的字元(注:當兩個都存在時,現匹配到那個輸出那個),re.search("abc|abc", "abcbabcadsa").group() 結果 abc。re.search("[a|a]bc", "abcadsa").group() 結果 abc

'(...)'    分組匹配,re.search("(abc)a(123|45)", "abcabca123qeq").groups() 結果('abc', '123'),例如:re.search("([a-z]+)([0-9]+)", "kevin1231").groups())  結果 ('kevin', '1231')

'\a'      只從字元開頭匹配,re.search("\aabc", "kevinabc") 返回none是匹配不到的  同'^'

『』     匹配範圍(從開頭開始匹配),re.search("([a-z]+)([0-9]+)", "kevin1231").groups()  結果 ('kevin', '1231')

'\z'      匹配字元結尾,同$

'\d'      匹配數字0-9

'\d'     匹配非數字

'\w'     匹配[a-za-z0-9]

'\w'    匹配非[a-za-z0-9]

's'      匹配空白字元、\t、\n、\r,

re.findall('\s+', "ab\tdsa\nsdsa\r")

結果['\t', '\n', '\r']

'(?p...)'    分組匹配s = '1366597199609090054'  方法一:re.search("(?p\d)(?p\d)(?p\d)", s) .groups() 結果('136', '659', '7199')

方法二:res = re.search("(?p\d)(?p\d)(?p\d)", s) 

res.groupdict()  結果  

轉義

當要以'|'分割時要轉義寫為'\|" 當s中存在"\"時,系統會自動生成"\\"所以轉義時要寫成"\\\"

import

res = '

dsa\dsakl1321aa|ddarewr$d1321afds

'print(re.split("

\\\|\d+|\||\$

", s))

結果 ['dsa', 'dsakl', 'aa', 'ddarewr', 'd', 'afds']

flags標誌符

1、re.i(re.ignorecase):忽略大小寫(括號內是完整寫法,下同)例如: re.search('k', 'kevin', re.i)  結果

2、m(multiline): 多行模式,改變'^'和'$',的行為 例如:re.search('foo.$', 'foo1\nfoo2\n', re.multiline).group() 會匹配到foo1

3、s(dotall): 改變'.'的行為   例如:re.search('.', '\n', re.s) 結果 \n      如果不re.s的話則顯示none

4、x(re.verbose) 可以給你的表示式寫注釋,使其更可讀。

例如:

import

res = '

31-213*312/1321+1321

'print(re.split("

[-*/+] # test

", s,re.x,))

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 編譯標誌位,用於修改正規表示式的匹配方式...