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