Python常用模塊--re

 

Python內部的re--傳聞中的正則模塊,是無數初學者心中的噩夢,幾乎到了談正則色變的地步。

 

1.正則是幹什麼的

  正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。

  也就是說正則做了兩件事,一件事就是制定匹配的規則(如:只匹配數字),一件事是對符合規則的數據進行處理(提取、賦值、刪除等)。

  那正則究竟有什麼實際的用途呢?

  比如說:使用Python在做爬蟲時(如爬取拉鉤),服務器傳回的response數據主體是HTML代碼,需要使用正則匹配並提取相應的字段(如職位名稱),這樣就會獲得好多的鍵值對({'職位名稱':'Python高端工程師'},感興趣的可以看看我的練手小項目

  再比如說:公司領導安排人事部門,統計一下近一年所有投寄的簡歷,要求彙總姓名、電話等,人事的同事看了下簡歷,我去,1000+份,工作量太大了,向你求助,這時候,你就可以使用Python循環讀取每個文件,使用正則匹配裏面的姓名、電話等,保存到Excel裏,分分鐘完成。

 

2.正則的第一件事:制定匹配的規則

  Python官方:https://docs.python.org/3.7/library/re.html

  官方文檔可閱讀性差些,但是勝在“真實”(實用)。

  推薦參考:https://www.jb51.net/tools/zhengze.html 

  jb51這個網站對正則的語法,由淺入深的分析,總結的特別好,篇幅太~~~~~~~~~~~~~~長,這裏就不復制粘貼了。

  簡要說下在Python中如何使用re:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = "問道編程"
__date__ = "2019/03/18 19:43"

import re

# 匹配手機號碼
phone_pat = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$') # 匹配規則

get_phone1 = '15012341234'
get_phone2 = '12012341234' # 測試用例

print(phone_pat.match(get_phone1)) # 打印結果,生成匹配對象
print(phone_pat.match(get_phone2)) # 返回None

 

3.常用的re方法s:

 

re.compile():

  編譯一個正則表達式模式爲正則表達式對象,其可用於使用它的匹配 match()search()以及其他方法,爲了方便重複使用匹配規則,說明如下:

prog = re.compile(pattern)  # pattern 是匹配規則,字符串,通常前面加r,如  r'\d+'  匹配數字的
result = prog.match(string)
# 相當於
result = re.match(pattern, string)

 

re.search():

  對字符串進行查找匹配,如果有匹配的數據,則返回第一個匹配的對象,如果沒有匹配的對象,則返回None:

import re

result = re.search('\d', 'ads123asd')
print(result) # <_sre.SRE_Match object; span=(3, 4), match='1'>

 

re.match():

  從字符串的開頭開始匹配,如果有匹配的數據,則返回第一個匹配的對象,如果沒有匹配的對象,則返回None:

import re

result = re.match('\d', 'ads123asd')
print(result) # None 因爲開頭就不匹配 ,跟search的區別

result = re.search('ads\d', 'ads123asd')
print(result) # <_sre.SRE_Match object; span=(0, 4), match='ads1'>

 

re.split():

  常用於字符串的切分,返回一個list,非常實用的功能:

import re

s = 'a,b;c d e'
a = s.split(' ')
print(a) # ['a,b;c', 'd', '', '', '', 'e'] 使用str自帶的切分方法侷限性太大
b = re.split(r'[,;\s]+',s)
print(b) # ['a', 'b', 'c', 'd', 'e'] # 使用re的切分工具可以實現多種組合的情況

 

re.findall():

  獲取所有匹配的對象,返回list,也是非常實用的功能:

import re

a = re.compile(r'\d+') # 獲取所有數字
b = a.findall('ax2k3h5b6n7')
print(b) # ['2', '3', '5', '6', '7']

 

re.sub():

  替換匹配的字段,也是re中非常強大的功能,web項目中常用於博客代碼高亮的過濾器中:

import re

b = re.sub(r'\d', 'a', 'b1b23b21b34b124')
print(b)

 

本文參考:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章