上一節大灰狼和大家分享了正則表達式的基礎使用技巧,使用re模塊中的compile()方法即可進行正則表達式的匹配運算,不清楚的可以查看上一篇“Python教程之正則表達式(基礎篇)”
。
但我們知道正則表達式所要匹配的內容千姿百態,除了我們最常見的數字以外還有字母以及特殊符號,同時在一篇將要匹配的文本中,符合要求的匹配對象可能多個。
所以應該可以按照要求將我們要匹配的內容全都讀取出來,所以這一節大灰狼和大家分享一下如何更加愣貨的使用正則表達式來匹配文本。
.
findall()方法
首先在上一節關於正則表達式的基本匹配中講到使用‘\d’來匹配數字0-9,同時在正則表達式中還有類似的匹配。
我們規定:在正則表達式的使用過程中,使用反斜槓‘\’加字母匹配常見的字符,具體的匹配規則如下圖所示:
縮寫字符分類 | 表示 |
---|---|
\d | 0到9的任何數字 |
\D | 除0到9以外的任何字符 |
\w | 任何數字、字母、下劃線字符 |
\W | 除數字 字母 下劃線以外的任何字符 |
\s | 空格、製表符、換行符 |
\S | 除空格、製表符、換行符以外的任何字符 |
同時在正則表達式的使用過程中,re模塊中還有另外一種讀取文本匹配內容的方法:findall()方法。
該方法與我們之前所講的group()方法不同,re模塊中的group()方法只能匹配文本中的第一個符合要求的匹配對象,而findall()方法則匹配文本中所有符合要求的內容。
並且以列表的形式返回所有符合要求的匹配。對比實現效果代碼如下:
search()和findall()方法比較
import re
charRegex = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')
text = 'the tel is 123-4567-8910 and 456-7891-1234 and 789-1234-5678'
mo = charRegex.search(text)
print('search()方法的匹配結果:')
print(mo.group())
print('findall()方法的匹配結果:')
print(charRegex.findall(text))
.
建立自己的字符分類
在使用正則表達式的時候我們通常會需要使用這些匹配字符以外的東西,如我們特定匹配某一個字母或數字。
因此在Python的re模塊中設定,在建立正則表達式的時候可以使用‘[]’中括號來特定設定要匹配的字符,這樣在匹配文本的時候,就會特定匹配中括號裏面的內容,效果代碼如下:
建立自己的字符匹配
import re
charRegex = re.compile(r'[abcd3]')
text = 'the tel is 456-7891-1234 and 789-1234-5678'
print(charRegex.findall(text))
.
不區分大小寫的匹配
在使用正則表達式進行匹配的時候,我們可能往往會因爲大小寫字母的匹配而感到煩惱。
那麼在re模塊中就具備了不區分大小寫的匹配設定,在正則表達式的設定過程中,使用re.IGNORECASE(簡寫爲re.I)方法來消除大小寫的匹配。
效果代碼如下;
re.I方法不區分大小寫匹配
import re
charRegex = re.compile(r'[abcde]', re.I)
text = 'Regex AND compile'
print(charRegex.findall(text))
.
sub()方法替換字符串
正則表達式不僅能夠匹配特定的文本對象,而且還可以使用新的字符將這些字符替換,這便是re模塊中的sub()方法的功能。
Regex的sub()方法將傳入兩個字符串參數,第一個參數是一個字符串,是用於替換髮現的匹配,第二個參數是將要被匹配的文本對象,使用該方法可以將匹配到的內容替換掉。實現代碼效果如下:
sub()方法
import re
charRegex = re.compile(r'and')
text = 'Regex and compile and is pythonandider'
print(charRegex.sub('www', text))
以上就是正則表達式最常用的一些方法,但正則表達式的使用並非僅限於此。
關注分享,大灰狼陪你一起進步!
同時也可以關注我的微信公衆號“灰狼洞主” 獲取更多Python技術分享和互聯網相關資訊!