一、正規表示式的概念
通用的字串表達框架
簡潔表達一組字串的表示式
針對字串表達「簡潔」和「特徵」思想的工具
表達文字型別的特徵(病毒、入侵等)
同時查詢或替換一組字串
匹配字串的全部或部分
正規表示式的使用
編譯:將符合正規表示式語法的字串轉換成正規表示式特徵
二、正規表示式的語法
由字元和操作符構成
常用操作符:
. 表示任何單個字元
字符集,對單個字元給出取值範圍
[^ ] 非字符集,對單個字元給出排除範圍
* 前面乙個字元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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...