正則表達(dá)式

regular expression, regex, RE
正則表達(dá)式是用來簡(jiǎn)潔表達(dá)一組字符串的表達(dá)式

image.png

正則表達(dá)式的優(yōu)勢(shì):簡(jiǎn)介、一行勝千言、一行就是特征(模式)
正則表達(dá)式在文本處理中十分常用:
表達(dá)文本類型的特征(病毒、入侵等)
同時(shí)查找或替換一組字符串
匹配字符串的全部或部分

image.png

編譯:將符合正則表達(dá)式語法的字符串轉(zhuǎn)換成正則表達(dá)式特征

正則表達(dá)式語法

正則表達(dá)式是由字符和操作符構(gòu)成

image.png
image.png

正則表達(dá)式語法實(shí)例:
P(Y|YT|YTH|YTHO)?N 對(duì)應(yīng) 'PN'、'PYN'、'PYTN'、'PYTHN'、'PYTHON'
PYTHON+ 對(duì)應(yīng)
'PYTHON'、'PYTHONN'、'PYTHONNN' …
PY[TH]ON 對(duì)應(yīng)
'PYTON'、'PYHON'
PY[^TH]?ON 對(duì)應(yīng)
'PYON'、'PYaON'、'PYbON'、'PYcON'…
PY{:3}N 對(duì)應(yīng)
'PN'、'PYN'、'PYYN'、'PYYYN'…

image.png
image.png

python RE庫(kù)的使用

RE庫(kù)是python庫(kù)的標(biāo)準(zhǔn)庫(kù),主要用于字符串匹配
import re
re庫(kù)采用raw string類型表示正則表達(dá)式,表示為:r'text'
r'[1‐9]\d{5}'
r'\d{3}‐\d{8}|\d{4}‐\d{7}'
raw string是不包含對(duì)轉(zhuǎn)義符再次轉(zhuǎn)義的字符串
re庫(kù)也可以采用string類型表示正則表達(dá)式,但更繁瑣
例如:
'[1‐9]\d{5}'
'\d{3}‐\d{8}|\d{4}‐\d{7}'
建議:當(dāng)正則表達(dá)式包含轉(zhuǎn)義符時(shí),使用raw string

RE庫(kù)的主要功能函數(shù)

image.png

re.search(pattern, string, flags=0)
在一個(gè)字符串中搜索匹配正則表達(dá)式的第一個(gè)位置返回match對(duì)象
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png
image.png

re.match(pattern, string, flags=0)
從一個(gè)字符串的開始位置起匹配正則表達(dá)式返回match對(duì)象
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png

re.findall(pattern, string, flags=0)
搜索字符串,以列表類型返回全部能匹配的子串
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png

re.split(pattern, string, maxsplit=0, flags=0)
將一個(gè)字符串按照正則表達(dá)式匹配結(jié)果進(jìn)行分割返回列表類型
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? string : 待匹配字符串
? maxsplit: 最大分割數(shù),剩余部分作為最后一個(gè)元素輸出
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png

re.finditer(pattern, string, flags=0)
搜索字符串,返回一個(gè)匹配結(jié)果的迭代類型,每個(gè)迭代元素是match對(duì)象
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png

re.sub(pattern, repl, string, count=0, flags=0)
在一個(gè)字符串中替換所有匹配正則表達(dá)式的子串返回替換后的字符串
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? repl : 替換匹配字符串的字符串
? string : 待匹配字符串
? count : 匹配的最大替換次數(shù)
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記

image.png
image.png

RE庫(kù)的一種等價(jià)用法

rst = re.search(r'[1‐9]\d{5}', 'BIT 100081')
pat = re.compile(r'[1‐9]\d{5}')
rst = pat.search('BIT 100081')
面向?qū)ο笥梅ǎ壕幾g后的多次操作
函數(shù)式用法:一次性操作
regex = re.compile(pattern, flags=0)
將正則表達(dá)式的字符串形式編譯成正則表達(dá)式對(duì)象
? pattern : 正則表達(dá)式的字符串或原生字符串表示
? flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記
regex = re.compile(r'[1‐9]\d{5}')

image.png

RE庫(kù)的Match對(duì)象

Match對(duì)象是一次匹配的結(jié)果,包含匹配的很多信息

match = re.search(r'[1‐9]\d{5}', 'BIT 100081')
if match:
print(match.group(0))
type(match)
<class '_sre.SRE_Match'>
Match對(duì)象的屬性

image.png

Match 對(duì)象的方法

image.png
image.png

RE庫(kù)的貪婪匹配和最小匹配

image.png
image.png
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,183評(píng)論 0 13
  • 本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例...
    Python程序媛閱讀 1,440評(píng)論 0 22
  • 1. 正則表達(dá)式基礎(chǔ) 1.1. 簡(jiǎn)單介紹 正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工...
    隨風(fēng)化作雨閱讀 410評(píng)論 0 0
  • 正則表達(dá)式有很多流派,也有很多的特性,不同的語言支持度也是不一樣的。本篇文章是寫Python中的正則表達(dá)式的用法的...
    Moscow1147閱讀 1,201評(píng)論 0 0
  • 云南行第二站,香格里拉。 從麗江驅(qū)車前往香格里拉約4個(gè)小時(shí),司機(jī)師傅提醒著海拔將從2400升至3300,由于沿途正...
    bfbly閱讀 316評(píng)論 0 0

友情鏈接更多精彩內(nèi)容