Python常用模組 re

2022-05-06 22:57:13 字數 2884 閱讀 3137

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

1.正則是幹什麼的

正規表示式,又稱規則表示式。(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。

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

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

比如說:使用python在做爬蟲時(如爬取拉鉤),伺服器傳回的response資料主體是html**,需要使用正則匹配並提取相應的字段(如職位名稱),這樣就會獲得好多的鍵值對(,感興趣的可以看看我的練手小專案。

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

2

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

python官方:

官方文件可閱讀性差些,但是勝在「真實」(實用)。

推薦參考:

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$') # 匹配規則

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)

本文參考:

Python中常用re模組

匹配字串開頭 匹配字串結尾 匹配任意字元,除了換行符 匹配指定的一組字元,amk 匹配 a 或 m 或 k 匹配除了這組字元以外的字元 匹配0或多個 匹配1或多個 匹配0或1個,非貪婪模式 精確匹配前面表示式n次,如a不能匹配ba,只能匹配baab 匹配n次前面的表示式,a a a a 匹配 n 到...

Python常用模組之re

2 python正則常用模組 2.1 re.match與re.search 函式說明 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.search 掃瞄整個字串並返回第乙個成功的匹配。函式語法 re.match pattern,st...

常用模組 re模組

由堆具有特殊意義的字元組成的式子。用於匹配查詢字串內容。主要學習重點,就是學習這些字元的含義。abc 表示式不包含任何特殊字元,就是精準匹配,說白了判斷是否相同 print re.findall abc abcbbb abc n t f 符號含義 a從字元的開始處開始匹配 z從字元的結尾處匹配 從字...