整理自此博客與菜鳥教程
re
01 字符含義
-
普通字符和11個元字符
1.png
python中默認采用的是貪婪匹配,會輸出最長的子串,添加?可以變成非貪婪匹配,輸出最短子串
a = re.match('<(.*)>','<11><22><33>').group() print(a) b = re.match('<(.*?)>','<11><22><33>').group() print(b) c=re.match('A.*C','AbCbbbCbbbC').group() print(c) d=re.match('A.*?C','AbCbbbCbbbC').group() print(d) ''' <11><22><33> <11> AbCbbbCbbbC AbC '''
-
預(yù)定義字符集(可以寫在字符集[...]中)
2.png
-
特殊分組用法
3.png
02 常用函數(shù)
-
compile(pattern,flags=0)
編譯正則表達式模式,返回一個對象的模式。(可以把常用的正則表達式編譯成正則表達式對象,提高效率)pattern: 編譯時用的表達式字符串。
flags 編譯標志位,用于修改正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等。常用的flags有:
4.png
-
match(pattern, string,flags=0)
嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,就返回None
span表示只返回結(jié)果中的span元組,表示起始位置和結(jié)束位置,從0開始計數(shù)import re # match用于匹配字符串是否在開頭的位置 print(re.match('www','www.baidu.com').span()) # 只返回位置元組信息 print(re.match('www$','www.baidu.com')) # $表示完全匹配 print(re.match('baidu','www.baidu.com')) #不在起始位置,返回None ''' (0, 3) None None ''' -
search(pattern, string,flags=0)
re.search函數(shù)會在整個字符串內(nèi)查找模式匹配,只要找到第一個匹配然后返回,如果字符串沒有匹配,則返回None。print(re.match('baidu','www.baidu.com')) print(re.search('baidu','www.baidu.com').span()) print(re.search('bili+','www.bilibili.com')) ''' None (4, 9) <re.Match object; span=(4, 8), match='bili'> '''注:match和search一旦匹配成功,就是一個match object對象,而match object對象有以下方法:
- group() 返回被 RE 匹配的字符串
- start() 返回匹配開始的位置
- end() 返回匹配結(jié)束的位置
- span() 返回一個元組包含匹配 (開始,結(jié)束) 的位置
- group() 返回re整體匹配的字符串,可以一次輸入多個組號,對應(yīng)組號匹配的字符串
-
findall(pattern, string.flags=0)
可以獲取字符串中所有匹配的字符串,返回一個列表print(re.search('\w*oo\w*','cool,good,wow')) print(re.findall('\w*oo\w*','cool,good,wow')) ''' <re.Match object; span=(0, 4), match='cool'> ['cool', 'good'] ''' -
finditer(pattern, string, flags=0)
搜索string,返回一個順序訪問每一個匹配結(jié)果(Match對象)的迭代器。找到 RE 匹配的所有子串,并把它們作為一個迭代器返回。iter=re.finditer('\d+','10,9,8,7...') for i in iter: print(i) print(i.group()) print(i.span()) ''' <re.Match object; span=(0, 2), match='10'> 10 (0, 2) <re.Match object; span=(3, 4), match='9'> 9 (3, 4) <re.Match object; span=(5, 6), match='8'> 8 (5, 6) <re.Match object; span=(7, 8), match='7'> 7 (7, 8) ''' -
split(pattern, string[, maxsplit])
按照能夠匹配的子串將string分割后返回列表。
可以使用re.split來分割字符串,如:re.split(r'\s+', text);將字符串按空格分割成一個單詞列表。
maxsplit用于指定最大分割次數(shù),不指定將全部分割。print(re.split('\s','hello my friend!')) #['hello', 'my', 'friend!'] -
sub(pattern, repl, string, count)
使用repl替換string中每一個匹配的子串后返回替換后的字符串。count表示最大替換個數(shù),默認為0 ,每個匹配項都替換
print(re.sub('\d','0','123456789')) print(re.sub('\d','0','123456789',3)) ''' 000000000 000456789 '''subn(pattern, repl, string, count=0, flags=0)
返回替換后字符串和替換次數(shù)的元組print(re.sub('\d','0','123456789')) print(re.subn('\d','0','123456789')) ''' 000000000 ('000000000', 9) '''



