re模塊 - 正則表達式 疏理(一)


在網上總是很難找到令自己比較滿意的,關於正則表達式的文章。所以決定自己來總結一波,並配上相應的示例。

正則表達式:定義了規則,用來字符串處理。

用途:

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次

 

第一波總結到這里打止。。歡迎留言和交流。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM