regular expression, regex, RE
正則表達式是用來簡潔表達一組字符串的表達式
正則表達式的優(yōu)勢:簡介悯搔、一行勝千言癌椿、一行就是特征(模式)
正則表達式在文本處理中十分常用:
表達文本類型的特征(病毒、入侵等)
同時查找或替換一組字符串
匹配字符串的全部或部分
編譯:將符合正則表達式語法的字符串轉(zhuǎn)換成正則表達式特征
正則表達式語法
正則表達式是由字符和操作符構(gòu)成
正則表達式語法實例:
P(Y|YT|YTH|YTHO)?N 對應(yīng) 'PN'睹栖、'PYN'基括、'PYTN'、'PYTHN'年堆、'PYTHON'
PYTHON+ 對應(yīng)
'PYTHON'、'PYTHONN'盏浇、'PYTHONNN' …
PY[TH]ON 對應(yīng)
'PYTON'变丧、'PYHON'
PY[^TH]?ON 對應(yīng)
'PYON'、'PYaON'绢掰、'PYbON'锄贷、'PYcON'…
PY{:3}N 對應(yīng)
'PN'译蒂、'PYN'、'PYYN'谊却、'PYYYN'…
python RE庫的使用
RE庫是python庫的標(biāo)準庫,主要用于字符串匹配
import re
re庫采用raw string類型表示正則表達式哑芹,表示為:r'text'
r'[1‐9]\d{5}'
r'\d{3}‐\d{8}|\d{4}‐\d{7}'
raw string是不包含對轉(zhuǎn)義符再次轉(zhuǎn)義的字符串
re庫也可以采用string類型表示正則表達式炎辨,但更繁瑣
例如:
'[1‐9]\d{5}'
'\d{3}‐\d{8}|\d{4}‐\d{7}'
建議:當(dāng)正則表達式包含轉(zhuǎn)義符時,使用raw string
RE庫的主要功能函數(shù)
re.search(pattern, string, flags=0)
在一個字符串中搜索匹配正則表達式的第一個位置返回match對象
? pattern : 正則表達式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達式使用時的控制標(biāo)記
re.match(pattern, string, flags=0)
從一個字符串的開始位置起匹配正則表達式返回match對象
? pattern : 正則表達式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達式使用時的控制標(biāo)記
re.findall(pattern, string, flags=0)
搜索字符串聪姿,以列表類型返回全部能匹配的子串
? pattern : 正則表達式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達式使用時的控制標(biāo)記
re.split(pattern, string, maxsplit=0, flags=0)
將一個字符串按照正則表達式匹配結(jié)果進行分割返回列表類型
? pattern : 正則表達式的字符串或原生字符串表示
? string : 待匹配字符串
? maxsplit: 最大分割數(shù)碴萧,剩余部分作為最后一個元素輸出
? flags : 正則表達式使用時的控制標(biāo)記
re.finditer(pattern, string, flags=0)
搜索字符串,返回一個匹配結(jié)果的迭代類型末购,每個迭代元素是match對象
? pattern : 正則表達式的字符串或原生字符串表示
? string : 待匹配字符串
? flags : 正則表達式使用時的控制標(biāo)記
re.sub(pattern, repl, string, count=0, flags=0)
在一個字符串中替換所有匹配正則表達式的子串返回替換后的字符串
? pattern : 正則表達式的字符串或原生字符串表示
? repl : 替換匹配字符串的字符串
? string : 待匹配字符串
? count : 匹配的最大替換次數(shù)
? flags : 正則表達式使用時的控制標(biāo)記
RE庫的一種等價用法
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)
將正則表達式的字符串形式編譯成正則表達式對象
? pattern : 正則表達式的字符串或原生字符串表示
? flags : 正則表達式使用時的控制標(biāo)記
regex = re.compile(r'[1‐9]\d{5}')
RE庫的Match對象
Match對象是一次匹配的結(jié)果破喻,包含匹配的很多信息
match = re.search(r'[1‐9]\d{5}', 'BIT 100081')
if match:
print(match.group(0))
type(match)
<class '_sre.SRE_Match'>
Match對象的屬性
Match 對象的方法
RE庫的貪婪匹配和最小匹配