在網上總是很難找到令自己比較滿意的,關於正則表達式的文章。所以決定自己來總結一波,並配上相應的示例。
正則表達式:定義了規則,用來字符串處理。
用途:
1、匹配 - 符合規則的字符串,則認為匹配了。
2、提取 - 提取出符合規則的字符串。
python中通過re模塊來處理正則表達式。re模塊的常用方法如下:
re.match(re規則,字符串):從頭開始匹配。從字符串的第一個字符開始匹配,如果第一個字符不匹配規則,那么匹配失敗。
re.search(re規則,字符串):匹配包含。不要求從字符串的第一個字符就匹配。只要字符串當中有匹配該規則的,則就匹配成功。
re.findall(re規則,字符串):把所有匹配的字符放在列表中並返回。
re.sub(re規則,替換串,被替換串):匹配字符並替換。
正則表達式常用的規則如下:
下面一一示例來說明:
'.' : 是只匹配一個字符(除了\n)
如字符串a="hello123world!!" , 那么'.'匹配到的結果為:"h" .從字符串a中搜索,搜索什么呢,符合規則'.'的數據。
1 >>> import re #導入正則模塊
2 >>> re.search('.','hello123world!!') #使用search方法
3 <_sre.SRE_Match object; span=(0, 1), match='h'> #匹配成功,返回了一個匹配對象。匹配的結果為:h match=表示匹配到的結果
'^' : 匹配字符串的開頭。指定字符串必須以什么開頭,如果不一樣,則匹配失敗。
如字符串a="hello123world!!" , 那么'^h'匹配到的結果為:"h" .如果是'^F'則匹配失敗
1 >>> re.search('^h','hello123world!!') 2 <_sre.SRE_Match object; span=(0, 1), match='h'> #匹配以h開頭的字符串,匹配成功,匹配結果為:h
3 >>> re.search('^F','hello123world!!') 4 >>> #匹配失敗,為None
re.match方法也是從字符串開頭匹配。所以與^效果一樣:
1 1 >>> re.match('h','hello123world!!') 2 2 <_sre.SRE_Match object; span=(0, 1), match='h'> #匹配以h開頭的字符串,匹配成功,匹配結果為:h
3 3 >>> re.match('F','hello123world!!') 4 4 >>> #匹配失敗,沒有輸出
'$':指定字符串以$前的字符結尾 。
1 >>> re.search('!$','hello123world!!') 2 <_sre.SRE_Match object; span=(14, 15), match='!'> #匹配以!結尾的字符串,匹配成功,匹配結果為:!
4 >>> re.search('D$','hello123world!!') 5 >>> #匹配以D結尾的字符串,失敗
'*':表示匹配前面的字符 0次 或者 多次
'+':表示匹配前面的字符 1次 或者 多次
以上的所有匹配都只是匹配到了一個字符。那這兩個匹配符則可以匹配多次。
1 >>> re.search('lll*','hello123world!!') 2 <_sre.SRE_Match object; span=(2, 4), match='ll'> #*可以匹配到至於2個l
3
4 >>> re.search('lll+','hello123world!!') 5 >>> # +至少要匹配三個l 所以匹配失敗
如果我想要指定匹配次數呢? -----
'{m} ':指定匹配前面字符的次數。
1 >>> re.search('el{2}','hello123world!!') 2 <_sre.SRE_Match object; span=(1, 4), match='ell'> #匹配l兩次
3 >>>
4 >>> re.search('el{3}','hello123world!!') #匹配l三次 ,匹配失敗
5 >>>
6 >>> re.search('el{1}','hello123world!!') 7 <_sre.SRE_Match object; span=(1, 3), match='el'> #匹配l一次
如果只考慮匹配 0次 或者 1次呢 ---
'?':表示匹配前面的字符 0次 或者 1次
1 >>> re.search('el?','hello123world!!') 2 <_sre.SRE_Match object; span=(1, 3), match='el'> #?匹配l 0次或者 1次
3 >>>
4 >>> re.search('ello7?','hello123world!!') 5 <_sre.SRE_Match object; span=(1, 5), match='ello'> #? 匹配7 0次或者1次
第一波總結到這里打止。。歡迎留言和交流。