基礎匹配
'\d' 可以匹配乙個數字,'00\d'可以匹配'007';
'\w' 可以匹配乙個字母或者數字,'00\w'可以匹配'007'或者'00a';
'\s' 可以匹配乙個空格;
'.'
可以匹配任意字元;
匹配變長的字元,可以用*表示任意個字元(包括0個),用+表示至少乙個字元,
用?表示0個或者1個字元,用表示n個字元,用表示n-m個字元:
'\d\-\d' → '020-61228080'
高階
要做更精確的匹配,可以用[ ]表示範圍,比加:
[0-9a-za-z\_] 可以匹配乙個數字、字母或者下劃線;
[0-9a-za-z\_]+ 可以匹配至少由乙個數字、字母或者下劃線組成的字串;
[a-za-z\_][0-9a-za-z\_]*可以匹配由字母或下劃線開頭,後接任意個由乙個數字、字母或者下劃線組成的字串,也就是python合法的變數;
[a-za-z\_][0-9a-za-z\_]更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元);
a|b可以匹配a或b,所以(p|p)ython可以匹配'python'或者'python';
^表示行的開頭,^\d表示必須以數字開頭;
$表示行的結束,\d$表示必須以數字結束;
re模組
python提供的re模組,包含所有正規表示式的功能。
由於python的字串本身也用\轉義,所以要注意:
s='abc\\-001' 表示正則字串'abc\-001',但使用r字首就不用考慮轉義的問題了,r'abc\-001'。
match()方法判斷是否匹配,匹配成功返回乙個match()物件,否則返回none。常用判斷方法:
test = '使用者輸入的字串'if re.match(r'正規表示式', test):
print('ok')
else:
print('failed')
切割字串
用正規表示式切分字串比用固定的字元更靈活,請看正常的**:
>>> 'a b c'.split(' ')['a', 'b', '', '', 'c']
上述方法無法識別連續的空格,用正規表示式試試:
>>> re.split(r'\s+', 'a b c')['a', 'b', 'c']
分組
正規表示式還可以用於提取子串,用()表示的就是要提取的分組(group)。如^(\d)-(\d)$分別定義了兩個組,(\d)和(\d):
>>> m = re.match(r'^(\d)-(\d)$', '010-12345')>>> m
<_sre.sre_match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'
如果正規表示式中定義了組,就可以在match物件上用group()方法提取出子串來。
注意到group(0)永遠是原始字串,group(1)、group(2)……表示第1、2、……個子串,groups()表示乙個子串的元組。
貪婪匹配
正則匹配預設是貪婪匹配,也就是匹配盡可能多的字元。
編譯
當我們在python中使用正規表示式時,re模組內部會幹兩件事情:
1.編譯正規表示式,如果正規表示式的字串本身不合法,會報錯;
2.用編譯後的正規表示式去匹配字串。
如果乙個正規表示式要重複使用幾千次,出於效率的考慮,我們可以預編譯該正規表示式,
接下來重複使用時就不需要編譯這個步驟了,直接匹配:
>>> import re# 編譯:
>>> re_telephone = re.compile(r'^(\d)-(\d)$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')
正規表示式 正規表示式 總結
非負整數 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...
Python正規表示式總結
匹配除換行符意外的任意字元 abc 字元集合,一次只能匹配乙個字元,匹配a b c abc 字元集合,不是a b c a z 小寫字元 a z 不是小寫 b 單詞邊界 b 不匹配單詞邊界 d 0 9 匹配1個數字 d 0 9 不匹配1個數字 s 匹配乙個空白字元.包括製表符 換行符 空格 s 非空白...
正規表示式總結
正規表示式用於操作字串的規則,這些規則由一些符號所組成。使用正規表示式可以進行更複雜的操作,而且這種複雜的操作要比方法短的多。功能 1,匹配。使用的是string類中的matches方法。2,切割。使用的string類split方法。3,替換。4,查詢。1,將正則規則通過pattern類中的stat...