Python學習 (九 正規表示式)

2021-07-12 04:17:07 字數 2120 閱讀 2376

re模組使 python 語言擁有全部的正規表示式功能。re.match嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,就返回none,也含著truefalse的判斷。

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

#有以下使用方式

test = '使用者輸入的字串'

if re.match(r'正規表示式', test):

print

'ok'

else:

print

'failed'

pattern是匹配的正規表示式,string是要匹配的字串,flags作為預設引數是標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

由於python的字串本身也用\轉義,所以要特別注意:

s = 'abc\\-001'

# python的字串

# 對應的正規表示式字串變成:

# 'abc\-001'

強烈建議使用python的r字首,就不用考慮轉義的問題了:

s = r'abc\-001'

# python的字串

# 對應的正規表示式字串不變:

# 'abc\-001' 不過有乙個問題是單雙引號,這個還是得根據實際情況判別

用正規表示式切分字串比用固定的字元更靈活,使用re.split(pattern,str)無論多少個空格或者特殊字元都可以正常切割,也就是去掉:

>>> re.split(r'[\s\,\;]+', 'a,b;; c  d')

['a', 'b', 'c', 'd']

這個可以用於標籤規範化。

除了簡單地判斷是否匹配之外,正規表示式還有提取子串的強大功能。用()表示的就是要提取的分組(group)。比如:

>>> m = re.match(r'^(\d)-(\d)$', '010-12345') #兩個分組

>>> m

<_sre.sre_match object at>

>>> m.group(0) #0始終代表原始字串

'010-12345'

>>> m.group(1) #依此類推

'010'

>>> m.group(2)

'12345'

然而,用正規表示式無法很好的識別日期,時間卻沒有問題。

貪婪匹配指的是盡可能多的匹配。

>>> re.match(r'^(\d+)(0*)$', '102300').groups()

('102300', '') #本是任意個0,卻啥都沒有了

只要加乙個?就可以取消貪婪匹配了:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()

('1023', '00')

當我們在python中使用正規表示式時,re模組內部會幹兩件事情:

為了提高效率,我們可以預編譯該正規表示式,接下來重複使用時就不需要編譯這個步驟了,直接匹配:

>>> 

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')

關於正規表示式還有很多需要講的內容,通過下面這一張圖再配合上面講的知識,基本可以掌握大多數的用法了。**

Python學習總結(九)正規表示式

我的理解 正規表示式 regular expression 是用來做字串匹配的一種精簡表達方法。一般形式 result re.match 正規表示式,匹配字串 python中的正規表示式匹配規則 從左到右匹配,一旦匹配成功立刻返回class型別 不再匹配後續字元 否則返回nonetype 表示字元 ...

Python正規表示式初識(九)

該特殊字元是固定的寫法,其代表的意思是漢字。換句話說,只要字元中是漢字,就可以通過該字元進行匹配,該特殊字元也是用中括號括起來的。具體的 演示如下。1 原始字串是 加油 兩個漢字,然後將匹配模式直接為 u4e00 u9fa5 如下圖所 可以看到此時的輸出結果僅僅出現了乙個 加 字,因為該匹配模式預設...

Python 正規表示式學習(二)正規表示式語法

一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...