正則表達(dá)式:匹配或查找符合某些規(guī)則的字符串?dāng)?shù)據(jù),通用性強(qiáng),適用于很多編程語言
要用正則表達(dá)式,需導(dǎo)入re模塊,re.match(正則,要匹配的字符串)根據(jù)正則表達(dá)式從頭開始匹配字符串?dāng)?shù)據(jù),match方法進(jìn)行匹配,group方法來提取匹配到的數(shù)據(jù),正則前加r
單字符匹配:
. 匹配任意一個(gè)字符(除了\n)
[ ]匹配[]中列舉的字符
\d 數(shù)字0~9
\D 非數(shù)字
\s 匹配空白:空格,tab鍵
\S 非空白
\w 非特殊字符,即a~z,A~Z,0~9,_,漢字
\W ?特殊字符 非字母,非數(shù)字,非漢字
匹配多個(gè)字符的格式:
*匹配前一個(gè)字符0次或無限次,可有可無
+ 一次或無限次
?一次或0次
{m} 前一個(gè)字符出現(xiàn)m次
{m,n} ?前一個(gè)字符出現(xiàn)m到n次
匹配開頭和結(jié)尾的正則表達(dá)式:
^ 匹配字符串開頭 (“^\d.*\d&”,”3s2”)匹配以數(shù)字開頭以數(shù)字結(jié)尾,中間不限
$ 匹配字符串結(jié)尾
[^指定字符]除指定字符外都匹配 ?(”[^abc]”,”d”)
匹配分組:
| 匹配左右任意一個(gè)表達(dá)式
(ab) 將括號(hào)中字符作為一個(gè)分組
\num 引用第num個(gè)分組匹配到字符串
(?P<name>) 分組起別名,可以將前面用到的匹配規(guī)則起名,然后后面直接用
(?P=name) 引用別名為name分組匹配到的字符串
re模塊的高級用法:
re.search(pattern,str) 根據(jù)正則表達(dá)式查找數(shù)據(jù),只查找一次
re.findall(pattern,str)查找出全部匹配項(xiàng)
re.sub(pattern,reply,str,count=1) 將匹配到的數(shù)據(jù)進(jìn)行替換,count為替換次數(shù),默認(rèn)為全部替換
re.split(pattern,str, maxsplit=1)根據(jù)匹配進(jìn)行切割字符串,并返回一個(gè)列表,maxsplit為分割次數(shù),默認(rèn)全部分割
Python貪婪和非貪婪:
Python里的數(shù)量詞默認(rèn)是貪婪的,總是嘗試匹配盡可能多的字符;
非貪婪:匹配盡可能少的字符
貪婪轉(zhuǎn)為非貪婪:在* , ? + {m,n}后加上?
Python中正則表達(dá)式匹配數(shù)據(jù)時(shí)字符串前面加上r表示原生字符串,數(shù)據(jù)里面的反斜杠不需要手動(dòng)進(jìn)行轉(zhuǎn)義,r只針對反斜杠起作用,re.match(r”c:\\a”,”c:\\a\\b")