什麼是正則表達式?
概念
正則表達式,又稱規則表達式(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE)
正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯
正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串
python正則表達式工具包:re
系統自帶,不需要安裝,可以直接導入
爬蟲中正則表達式的作用是什麼?
“模糊匹配”
requests+BeautifulSoup爬蟲邏輯中,在標籤識別基礎上,匹配裏面的信息 → 處理文本內容、提取字段數據採集後,在pandas中對字段進行處理
示例
顯然裏面前三個格式上是有統一的樣式的,而最後一個明顯是來搗亂的,因此要提取裏面的數據,可以使用下面的方式
m = r'(\D*)的銀行存款爲(\d*萬)'
for i in lst:
print(re.match(m,i))
輸出的結果爲:(其中r後面的字符代表原生字符,\D代表非數字字符,\d代表數字字符,*代表有0或n個字符)
如果直接使用re.match()方法,會返回一個Match對象,上面加上括號的目的就是爲了獲取滿足括號內要求的值,如下
for i in lst:
print(re.match(m,i).groups())
輸出的結果爲:(滿足條件的話,會以元祖的形式將數據返回,不滿足的數據會報錯)
爲了防止系統報錯,一般是要進行匹配成功判斷,然後再進行匹配成功的結果輸出,如下
for i in lst:
# print(re.match(m,i).groups())
match_result = re.match(m,i)
dic = {}
if match_result:
dic['姓名'] = match_result.group(1)
dic['存款'] = match_result.group(2)
else:
continue
print(dic)
輸出的結果爲:
通過上面的示例,大致可以把正則表達式的使用步驟歸納爲:【目標數據】–> 【模式設置】–> 【進行匹配】–> 【數據提取】–> 【數據輸出】
re.match()方法講解
1)re.match(pattern, string, flags=0) → 嘗試從字符串的 起始位置 匹配一個模式,如果不是 起始位置 匹配成功的話,match()就返回none
pattern:匹配的正則表達式
string:要匹配的字符串。
flags:標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
2)返回結果
匹配成功re.match方法返回一個匹配的對象,否則返回None
3)可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式
group()/group(0) → 返回成功匹配的內容
group(num) → 返回成功匹配的內容中第num個小組的字符
groups() → 返回一個包含所有小組字符串的元組,從 1 到 所含的小組號
示例
以上面列表裏的第一個數據爲例,對上面的內容進行一一輸出(前兩個內容已經在前面講解過了,下面主要是對第三個內容進行輸出)
4)通過span()方法用於以元祖形式返回匹配的起始位置和結束位置
span() 返回一個元組包含匹配 (開始,結束) 的位置
start() 返回匹配開始的位置
end() 返回匹配結束的位置
示例
修飾符 - 可選標誌
1)概念
正則表達式可以包含一些可選標誌修飾符來控制匹配的模式。修飾符被指定爲一個可選的標誌;多個標誌可以通過按位 OR(|) 它們來指定
2)修飾符
名稱 | 作用 |
---|---|
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.U | 使 . 匹配包括換行在內的所有字符 |
re.S | 根據Unicode字符集解析字符。這個標誌影響 \w, \W, \b, \B. |
re.X | 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。 |
示例
至此,正則表達式的快速上手的內容就介紹完畢了,下面介紹具體的匹配模式