python3正則表達式

re.match函數

re.match函數嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
函數語法:
re.match(pattern, string, flags=0)
函數參數說明:

參數 描述
pattern 匹配的正則表達式
string 要匹配的字符串
flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配

匹配成功re.match方法返回一個匹配的對象,否則返回None。

可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
示例

import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
   print("matchObj.group() : ", matchObj.group())
   print("matchObj.group(1) : ", matchObj.group(1))
   print("matchObj.group(2) : ", matchObj.group(2))
else:
   print("No match!!")

結果:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

re.search函數

re.search函數掃描整個字符串並返回第一個成功匹配的字符串。
函數語法:
re.search(pattern, string, flags=0)
函數參數說明:

參數 描述
pattern 匹配的正則表達式
string 要匹配的字符串
flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配

匹配成功re.search方法返回一個匹配的對象,否則返回None。

可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

import re
 
line = "Cats are smarter than dogs";
 
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Nothing found!!")

結果:
searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter

re.match與re.search的區別
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。

re.sub函數

re.sub函數用於替換字符串中匹配項。
函數語法:
re.sub(pattern, repl, string, count=0, flags=0)
參數:
pattern : 正則中的模式字符串。
repl : 替換的字符串,也可爲一個函數。
string : 要被查找替換的原始字符串。
count : 模式匹配後替換的最大次數,默認 0 表示替換所有的匹配。
flags : 編譯時用的匹配模式,數字形式。
前三個爲必選參數,後兩個爲可選參數。

示例:

import re
 
phone = "2004-959-559 # 這是一個電話號碼"
 
# 刪除註釋
num = re.sub(r'#.*$', "", phone)
print ("電話號碼 : ", num)
 
# 移除非數字的內容
num = re.sub(r'\D', "", phone)
print ("電話號碼 : ", num)

結果:
電話號碼 : 2004-959-559
電話號碼 : 2004959559

compile函數

compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。

語法格式爲:
re.compile(pattern[, flags])

參數:
pattern : 一個字符串形式的正則表達式
flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數爲:
re.I 忽略大小寫
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
re.M 多行模式
re.S 即爲’ . ‘並且包括換行符在內的任意字符(’ . ‘不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
re.X 爲了增加可讀性,忽略空格和’ # '後面的註釋

示例:

>>>import re
>>> pattern = re.compile(r'\d+')                    # 用於匹配至少一個數字
>>> m = pattern.match('one12twothree34four')        # 查找頭部,沒有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開始匹配,沒有匹配
>>> print( m )
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開始匹配,正好匹配
>>> print( m )                                        # 返回一個 Match 對象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章