Python正規表示式總結

2022-02-08 14:08:34 字數 2323 閱讀 9221

基礎匹配

'\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...