import re
re.findall(pattern, string, flags=0)
pattern 指的是,正規表示式匹配規則
string 指的是,要進行匹配的字串
flags 指的是,可選引數,進行特定條件的匹配,如能讓匹配時不區分大小寫的re.i和能讓元字元.匹配\n的re.s
match_str = 'bac | bbc | bcc | bdc | bec'
字符集print(re.findall('b[ce]c',match_str))
取反print(re.findall('b[^ce]c',match_str))
精簡形式
print(re.findall('b[a-d]c',match_str))
取反print(re.findall('b[^a-d]c',match_str))
match_str = '&a0b12c344d55&ac_'
常見元字元--匹配數字
print(re.findall('\d',match_str))
print(re.findall('\d\d',match_str))
取反print(re.findall('\d',match_str))
單詞字元,字母數字下劃線
match_str = '&a0b12c344d55&ac_'
print(re.findall('\w',match_str))
取反print(re.findall('\w',match_str))
空白字元
match_str = '\r\t&a0b12c344d55&ac_ \n'
print(re.findall('\s',match_str))
取反print(re.findall('\s',match_str))
數量詞,限定匹配次數{}
match_str = '&a0b12c344d55&ac_678911'
print(re.findall('\d',match_str))
match_str2 = 'lemon12banana34pear56'
pat='[a-z]'
print(re.findall(pat,match_str2))
print(re.findall('[a-z]',match_str2))
貪婪與非貪婪 ?按最小長度匹配,預設最大長度
match_str = 'lemon12banananan34pear56'
print(re.findall('[a-z]',match_str))
print(re.findall('[a-z]?',match_str))
次數匹配
? 代表匹配前面的字元零次或一次
* 代表匹配前面的字元零次或多次
+ 代表匹配前面的字元一次或多次
match_str = 'lemo123 lemon345 lemonnnn567'
print(re.findall('lemon*',match_str))
print(re.findall('lemon+',match_str))
print(re.findall('lemon?',match_str))
對於 ? 總結
1.如果數量詞後面有 ?即{}後有?,該 ? 代表非貪婪的關鍵字,傾向於取最小長度匹配
2.如果字元 後面有 ?,該 ? 代表匹配前面字元 0次或1次
自己練習次數匹配1
match_str = 'lemon12ba3le4leaderleadinglabornananan34pear56'
print(re.findall('le[a-z]?',match_str)) 2---3位,從第2位開始的字元都要在a-z內
print(re.findall('le[a-z]*',match_str)) 2---無數字,從第三位開始的字元都要在a-z內
print(re.findall('le[a-z]+',match_str)) 3---無數字,從第3位開始的字元都要在a-z內
print(re.findall('le[a,b,c,d,e,f]+',match_str)) 3---無數字,從第3位開始的字元都要在a-f內
自己練習次數匹配2
match_str = 'lemon12ba3le4leaderleadinglabornananan34pear56'
print(re.findall('le[a-z]?',match_str))
print(re.findall('[a-z]?',match_str)) 這說明字符集[a-z]前有字母時,匹配顯示的空我們只是看不出來而已,當刪掉字符集[a-z]前面的字母時,匹配的空一下就顯示出來了
定位符(用來匹配字串的邊界)
^匹配 字串開始的位置
$匹配 字串結尾的位置
match_str = 'abcdef 123456 abcdef 456 abc'
print(re.findall('^[a-z]*',match_str)) 指定 被匹配的字串的開始位置必須是字母
match_str2 = '1abcdef 123456 abcdef 456 abc'
print(re.findall('^[a-z]*',match_str2)) 被匹配的字串的開始位置不是字母,匹配不到
print(re.findall('[a-z]$',match_str))
組的匹配()
組 與 字符集 區別 : (lemon) 匹配 lemon 這一組字元 ; [lemon] 匹配 括號中的任意乙個字母
print(re.findall('(lemon)',match_str)) findall進行組的匹配時會降重
print( re.search('(lemon)',match_str).group() )
. re.i re.s 可選引數
match_str = 'lemon\n lemon\n'
print(re.findall('.',match_str)) .能匹配除「\n」之外的任何單個字元
print(re.findall('.',match_str,re.s)) 能讓元字元.匹配\n的re.s
print(re.findall('(lemon.)',match_str,re.s|re.i)) 能讓匹配時不區分大小寫的re.i和能讓元字元.匹配\n的re.s
re.findall 搜尋整個字串,返回所有匹配項。
re.search 搜尋整個字串,若匹配則返回第乙個匹配物件,若全都不匹配,則返回none。
re.match 從字串首字元開始匹配,若首字元不匹配,則返回none,若匹配則返回第乙個匹配物件。
match_str = 'a5678 lemon 1234'
match_str2='a5678 lemon 1234'
print(re.findall('\d',match_str))
print(re.search('\d',match_str2).group())
print(re.match('\d',match_str2)) 匹配成功後,注意成功後,可以用.group()檢視物件
group組匹配
group(0) 記錄的是完整匹配的結果
用 () 來表示其中的內容屬於乙個分組
需求:pat1='life(.*)sad'
r1=re.findall(pat1,match_str) 返回待匹配的內容
print(r1)
pat2='life(.*),but(.*)sad'
r2=re.search(pat2,match_str)
print(r2.group(0)) 整句話
print(r2.group(1)) 第一組
print(r2.group(2)) 第二組
print(r2.groups()) 所有組
re.sub(pattern, repl, string, count=0, flags=0)
pattern 正規表示式
repl 要替換的內容,也可傳入函式
string 被替換的字串
count 預設為0,代表全部替換 。
1 代表替換1次,
2 代表替換2次,以此類推
需求:將lemon 全都轉為 a
print(re.sub('lemon','a',match_str,count=0))
需求 xx:數字 小於 7的,都轉為 0 , 數字 大於等於 7的,都轉為 10
def transfer(value):
match_num=value.group()
print(match_num)
if int(match_num)<7:
return'0'
return'10'
print(re.sub('\d',transfer,match_str,count=0))
自己練習,把**號碼的中間四位換為*號
telephone='13152498967;13545689962;18809872345'
pat='\d\d\d'
print(re.findall(pat,telephone))
python正規表示式 學習筆記
正規表示式不僅僅適用於python,而且在其他語言中也是很重要的一部分,本文旨在讓python小白對於正規表示式有乙個整體的認識和體驗。什麼是正規表示式?它是嵌入python的微小的 高度專業化的語言 它是處理字串的強大工具。正規表示式能幹什麼?它能對字串進行匹配 切割 替換 獲取。什麼是元字元?特...
python正規表示式學習筆記
正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式的匹配 re.mach嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none.函式語法 re.match pattern,string,flads 0 函式引數說明 匹配的正規表示式 patt...
Python 正規表示式筆記
python 正規表示式筆記 正規表示式的先行斷言 lookahead 和後行斷言 lookbehind 正規表示式的先行斷言和後行斷言一共有4種形式 pattern 零寬正向先行斷言 zero width positive lookahead assertion pattern 零寬負向先行斷言 ...