正規表示式

2021-08-28 18:05:19 字數 3430 閱讀 5968

一、正規表示式的概念

通用的字串表達框架

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

針對字串表達「簡潔」和「特徵」思想的工具

表達文字型別的特徵(病毒、入侵等)

同時查詢或替換一組字串

匹配字串的全部或部分

正規表示式的使用

編譯:將符合正規表示式語法的字串轉換成正規表示式特徵

二、正規表示式的語法

由字元和操作符構成

常用操作符:

. 表示任何單個字元

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

[^ ] 非字符集,對單個字元給出排除範圍

* 前面乙個字元0次或無限次擴充套件(abc*表示ab,abc.abcc,abcc)

+ 前面乙個字元1次或無限次擴充套件(abc+表示abc,abcc,anccc)

? 前面乙個字元0次或一次擴充套件(abc?表示ab、abc)

| 左右表示式任意乙個(abc|def表示abc、def)

擴充套件前乙個字元m次(abc表示abbc)

擴充套件前乙個字元m至n次(含n)(ab表示abc,abbc)

^ 匹配字串開頭 (^abc表示abc且在乙個字串的開頭)

$ 匹配字串結尾 (abc$表示abc且在乙個字串的結尾)

() 分組標記,內部只能使用|操作符 (abc|def)

\d 數字,等價於[0-9]

\w 單詞字元,等價於[a-za-z0-9]

經典正規表示式例項:

^[a-za-z]+$ 由26個字母組成的字串

^[a-za-z0-9]+$ 由26個字母和數字組成搭檔字串

^-?\d+$ 整數形式的字串

^[0-9]*[1-9][0-9]*$ 正整數形式的字串

[\u4e00-\u9fa5] 匹配中文字元

\d-\d|\d-\d 國內**

0-99:[1-9]?\d

100-199: 1\d

200-249 : 2[0-4]\d

250-255: 25[0-5]

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

三、re庫的基本使用

raw string 型別(原生字串型別)

不包含轉義符的字串

flags常用標記:re.i 忽略正規表示式的大小寫,[a-z]能夠匹配小寫字元

re.m 正規表示式中^操作符能夠將給定字串的每行當作匹配開始

re.s 所有表示式中的.操作符能夠匹配所有字元,預設匹配換行符外的所有字元

search

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

在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件

pattern:正規表示式的字串或原生字串表示

string :帶匹配字串

flags:正規表示式使用時的控制標記

import re

match = re.search(r'[1-9]\d','bti 100081')

if match:

print(match.group(0))

match

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

從乙個字串的開始位置起匹配正規表示式,返回match物件

import re

match = re.match(r'[1-9]\d','100081 bit')

if match:

match.group(0)

findall

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

搜尋字串,以列表型別返回全部能匹配的子串

import re

ls = re.findall(r'[1-9]\d','bit100081 tsu100084')

lssplit

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

將乙個字串按照正規表示式匹配結果進行分割,返回列表型別

maxsplit:最大分割數,剩餘部分作為最後乙個元素輸出

re.split(r'[1-9]\d','bit100081 tsu100084')

['bit',' tsu',' ']

re.split(r'[1-9]\d','bit100081 tsu100084',maxsplit=1)

['bit',' tsu100084']

findditer

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

搜尋字串,返回乙個匹配結果的迭代型別,每個迭代元素是match物件

for m in re.finditer(r'[1-9]\d','bit100081 tsu100084')

if m:

print(m.group(0))

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

在乙個字串中替換所有匹配正規表示式的子串,返回替換後的字串

repl:替換匹配字串的字串

count:匹配的最大替換次數

re.sub(r'[1-9]\d',':zipcode', 'bit100081 tsu100084')

'bit:zipcode tsu:zipcode'

re庫的另一種等價用法

函式式用法:一次性操作

rst = re.search(r'[1-9]\d','bit 100081')

物件導向用法:編譯後多次操作

pat = re.compile(r'[1-9]\d')

rst = pat.seatch('bit 100081')

complie

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

將正規表示式的字串形式編譯成正規表示式物件

regex呼叫六個函式

四、re庫的match物件

match物件的屬性

.string:待匹配的文字

.re:匹配是使用的pattern物件

.pos:正規表示式搜尋文字的開始

.endpos:正規表示式搜尋文字的結束位置

match物件的方法

.group(0):獲得匹配後的字串

.start():匹配字串在原始字串的開始位置

.end():匹配字串在原始字串的結束位置

.span():返回(.start(),.end())

五、re庫的貪婪匹配和最小匹配

re庫預設採用貪婪匹配,即輸出匹配最長的子串

最小匹配操作符

*? 前乙個字元0次或無限次擴充套件,最小匹配

+? 前乙個字元1次或無限次擴充套件,最小匹配

?? 前乙個字串0次或1次擴充套件,最小匹配

? 擴充套件前乙個字元m至n(含n),最小匹配

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...