Re庫正則表達式,知識點,

regular expression regex RE 正則表達式

定義:用來簡潔表達一組字符串的表達式

"PN"

"PYN""PYTN" 正則表達式表達這則數(shù)據(jù):

"PYTHN" P(Y|YT|YTH|YTHO)?N

"PYTHON"

正則表達式的優(yōu)勢:簡潔 (非常簡單的表達字符串的特征,一行勝千言)

"PY"

"PYY"

"PYYY" 正則表達式表示:(表示無窮多個)"PYYYY" PY+

......"PYYYYYY......"

某種特點的字符串

"PY"開頭:

后續(xù)存在不多于10個字符串, 正則表達式表示:

后續(xù)字符不能是"P"或"Y" PY[^PY]{0,10}"PYABC" √ "PYKXYZ" ×

正則表達式是通用的字符串表達框架

簡潔表達一組字符串的表達式

針對字符串表達“簡潔”和“特征”思想的工具

判斷某字符串的特征歸屬

在文本處理中十分常用(主要應用于字符串匹配中)

表達文本類型的特征(病毒,入侵等)

同時查找或替換一組字符串

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

"PN"

"PYN""PYTN" 正則表達式表達這則數(shù)據(jù):

"PYTHN" regex= P(Y|YT|YTH|YTHO)?N"PYTHON" 編譯(特征):p = re.compile(regex)

語法:正則表達式語法由字符和操作符構(gòu)成

常見操作符

.

表示任何單個字符

[ ]

字符集,對單個字符給出取值范圍

[abc]表示a,b,c,

[a-z]表示a到z的單個字符[^ ]

非字符集,對單個字符 給出排除范圍

[^abc]表示非a或b或c的單個字符

*

前一個字符0次或無限次擴展

abc*表示ab,abc,abcc,abccc等

+

前一個字符1次或無限次擴展

abc+表示abc,abcc,abccc等

?

前一個字符0次或1次擴展(匹配)

abc?表示ab,abc

|

左右表達式任意一個

abc|def表示abc,def

{m}

擴展前一個字符m次(僅一個字符)

ab{2}c表示abbc

{m,n}

擴展前一個字符m至n次(含n)

ab{1,2}c表示abc,abbc

^匹配字符串開頭

^abc表示abc且在一個字符串的開頭

$

匹配字符串結(jié)尾

abc$表示abc且在一個字符串的結(jié)尾

( )

分組標記,內(nèi)部只能使用 | 操作符

(abc)表示abc,(abc|def)表示abc,def

\d

數(shù)字等價于|0-9|

\D

匹配任意非數(shù)字

\w

單詞字符,等價于|A-Za-z0-9_|

匹配字母數(shù)字下劃線

\W

匹配非字母數(shù)字下劃線

\s

匹配任意空白字符,等價于[\t\n\r\f]

\S

匹配任意非空字符

\A

匹配字符串開始

\Z

匹配字符串結(jié)束,如果存在換行,只匹配到換行前的結(jié)束字符串

\z

匹配字符串結(jié)束

正則表達式實例: 對應字符串

PY[TH]ON "PYTON","PYHON"

PY[^TH]?ON "PYON","PYaON","PYbON","PYcON"...

PY{:3}N (對大括號簽的字符重復0-3次) "PN","PYN","PYYN""PYYYN"

經(jīng)典正則表達式實例

^[A_Za-z]+$

由26個字母組成的字符串

^[A-Za-z0-9]+$

由26個字母和數(shù)字組成的字符串

^-?\d+$

整數(shù)形式的字符串

^[0-9]*[1-9][0-9]*$

正整數(shù)形式的字符串

[1-9]\d{5}

中國境內(nèi)郵政編碼,6位

[\u4e00-\u9fa5]

匹配中文字符

\d{3}-\d{8}|\d{4}-\d{7}

國內(nèi)電話號碼,010-68913536

匹配IP地址的正則表達式

IP地址字符串形式的正則表達式

(IP地址分四段,每段0-255)

\d+.\d+.\d+.\d+

\d{1,3}.\d{1.3}.\d{1,3}.\d{1,3}

精確表示:

0-99 : [1-9]?\d 100-199:1\d{2}

200-249 :2[0-4]\d 250-255: 25[0-5]

(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5].){3}(1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])

RE庫的基本使用

Re庫是Python的標準庫

import re

正則表達式的表示類型:

raw string 類型(原生字符串類型:不包含轉(zhuǎn)義符的字符串)(原生字符串與字符串

的不同是在字符串前面+小寫的r)

re庫采用raw string類型表示正則表達式,表示為:r"text"

例如:郵編:r "[1-9]\d{5}"

注意:當正則表達式包含轉(zhuǎn)義符時:使用raw string

re.search()

在一個字符串中搜索匹配正則表達式的第一位置,返回match對象

re.match()

從一個字符串的開始位置起匹配正則表達式,返回match對象

re.findall()

搜索字符串,以列表類型返回全部能匹配的子串

re.split()

講一個字符串按照正則表達式匹配結(jié)果進行分割,返回列表類型

re.finditer()

搜索字符串,返回一個匹配結(jié)果的迭代類型,每個迭代元素是match對象

re.sub()

在一個字符串中替換所有匹配正則表達式的子串,返回替代后的字符串

re.search(pattern,string,flags=0)在一個字符串中搜索匹配正則表達式的 第一個位置,返回match對象pattern:正則表達式的字符串或原生字符串表示

string:待匹配字符串

flags:正則表達式使用時的控制標記

常用標記

說明

re.l

忽略正則表達式的大小寫,[A-Z]能夠匹配小寫字符,

又叫:re.IGNORECASE

re.M

正則表達式中^操作符能夠?qū)⒔o定的每行當作匹配開始

又叫:re.MULTILINE

re.s

正則表達式中的 . 操作符能夠匹配所有字符,默認匹配除換行外的所有字符

又叫:re.DOTALL

import re

match = re.search(r"[1-9]\d{5}","BIT 100081")

if match:

? ? print(match.group(0)) #打印出匹配的結(jié)果

# 輸出:

100081

re.match(pattern,string,flags=0)

從一個字符串的的開始位置起匹配正則表達式,返回match對象(參數(shù)與search相同)

import re

#match = re.match(r"[1-9]\d{5}","BIT 100081")

#print(match.group(0)) #從開始匹配并不是我們所要求的的,單單輸出,會報錯

match = re.match(r"[1-9]\d{5}","100081? BIT")

if match:

? ? print(match.group(0))

re.findall (pattern,string,flags=0)

搜索字符串,以列表類型返回全部能匹配的子串 # 類型與上面一樣

import re

Is =re.findall(r"[1-9]\d{5}","BIT100081 YSU100084")

print(Is)

# 輸出:

['100081', '100084']

re.split(pattern,string,maxsplit=0,flags=0)

將一個字符串按照正則表達式匹配結(jié)果進行分割,返回列表類型

其中三項與其它相同(匹配的部分去掉)

maxsplit :最大分割數(shù),剩余部分作為最后一個元素輸出

import re

Is = re.split(r"[1-9]\d{5}","BIT100081 TSU100084")

print(Is)

# 輸出:

['BIT', ' TSU', '']

# 對上式子加入maxsplit

import re

Is = re.split(r"[1-9]\d{5}","BIT100081 TSU100084",maxsplit=1)

print(Is) #當maxsplit等于,只是將第一個給分割了

#輸出:

['BIT', ' TSU100084']

re.finditer(pattern,string,flags=0)

搜索字符串,返回一個匹配結(jié)果的迭代類型,每個迭代元素是match對象

(參數(shù)和第一個一樣)

import re

for m in re.finditer(r"[1-9]\d{5}","BIT100081 TSU100084"):

? ? if m:

? ? ? ? print(m.group(0))

# 輸出:

100081

100084

re.sub(pattern.repl,string,count=0,flags=0)

在一個字符串中替換所有匹配正則表達式的子串,返回替代換后的字符串(用一個新的字符串取代正則表達式匹配的字符串,并與原來的字符串相組合,返回一個新的字符串組合)

repl: 替換匹配字符串的字符串

count:匹配的最大替換次數(shù)

import re

Is =re.sub(r"[1-9]\d{5}",":zipcode","BIT100081 TSU100084")

print(Is)

# 輸出:

BIT:zipcode TSU:zipcode

re庫的另一種等價用法

rst = re.search(r"[1-9]\d{5}","BIT 100081")

函數(shù)式用法:一次性操作

面向?qū)ο笥梅ǎ壕幾g后的多次操做

pat = re.compite(r"[1-9]\d{5}")

rst = pat.search("BIT 100081")

(通過一次編譯,當多次使用時,加快運行速度)

regex = re.compile(pattern,flags=0)

將正則表達式的字符串形式編譯成正則表達式對象

(regex才是正則表達式的表示)

regex.search ()# 這樣引用時,將參數(shù)去去掉

match對象

屬性

說明

.string

待匹配的文本

.re

匹配時使用pattern對象

.pos

正則表達式搜索文本的開始位置

.endpos

正則表達式搜索文本的結(jié)束位置

import re

match = re.search(r"[1-9]\d{5}","BIT 100081")

if match:

? ? print(match.group(0))

# 使用type來檢查type的類型

print(type(match))

# 輸出:

100081

<class 're.Match'>

match對象的方法:

方法

說明.group(0)

獲得匹配后的字符串

.start()

匹配字符串在原始字符串的開始位置

.end()

匹配字符串在原始字符串的結(jié)束位置

.span()

返回(.start(), .end())元組類型,包含兩個元素

import re

m= re.search(r"[1-9]\d{5}","BIT 100081? TSU100084")

print(m.string)

print(m.re)

#輸出:

BIT 100081? TSU100084

re.compile('[1-9]\\d{5}')? # 這代表在內(nèi)部只有經(jīng)過compile之后的表達式才是正則表達式

#

import re

m= re.search(r"[1-9]\d{5}","BIT 100081? TSU100084")

print(m.string)

print(m.re)

print(m.pos)

print(m.endpos)? #最開始的位置到最后的位置

print(m.group(0))? # match對象只包含一次對象的結(jié)果,返回的是第一次匹配的結(jié)果

print(m.start())? # 一個對象的起始位置

print(m.end())

# 輸出:

BIT 100081? TSU100084

re.compile('[1-9]\\d{5}')

0

21

100081

4

10

Re庫的貪婪匹配和最小匹配

import re

m= re.search(r"PY.*N","PYANBNCNDN")

print(m.group()) # 根據(jù)不同長度,會有4種結(jié)果

# 輸出

PYANBNCNDN? ? # 默認貪婪匹配

貪婪匹配:

Re庫默認采用貪婪匹配,即輸出匹配最長的子串

最小匹配:生成最小匹配

import re

m= re.search(r"PY.*?N","PYANBNCNDN")

print(m.group()) # 根據(jù)不同長度,會有4種結(jié)果

# 輸出

PYAN

操作符

說明

*?

前一個字符0次或無限次擴展,最小匹配

+?

前一個字符1次或無限次擴展,最小匹配

??

前一個字符0次或1次擴展,最小匹配

{m,n}?

擴展前一個字符m至n次(含n),最小匹配

想要了解更多:您可以關注微信公眾號:foryouos

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

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

  • Python中的正則表達式(re) import rere.match #從開始位置開始匹配,如果開頭沒有則無re...
    BigJeffWang閱讀 7,593評論 0 99
  • re模塊手冊 本模塊提供了和Perl里的正則表達式類似的功能,不關是正則表達式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,198評論 0 13
  • 搞懂Python 正則表達式用法 Python 正則表達式 正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一...
    廈熱閱讀 1,776評論 0 2
  • 元字符 注意匹配時要匹配原始字符串,避免發(fā)生沖突 用 r” . ^ $ * + ? {} [] () \ | .匹...
    鏡澤閱讀 1,506評論 0 1
  • from re import fullmatch, search,findall 正則表達式就是用來檢測字符串是否...
    文_36e3閱讀 459評論 0 0

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