正則表達式
正則表達式用於搜索,替換和解析字符串。正則表達式遵循一定的語法規則,使用非常靈活,功能強大。使用正則表達式編寫一些邏輯驗證非常方便,例如電子郵件地址格式的驗證。python
提供了強大的re
模塊實現正則表達式的驗證。
正則表達式簡介
正則表達式是用於文本匹配的工具,它在源字符串中查找與給定的正則表達式相匹配的部分。一個正則表達式是由字母,數字和特殊字符(括號,星號,問號等)組成。正則表達式中有許多特殊的字符,這些特殊字符是構成正則表達式的要素。
匹配符[]
可以指定一個匹配範圍,例如“[ok]
”將匹配包含“o
”或“k
”的字符。同時[]可以與\w
,\s
,\d
等標記等價。例如:[0-9a-zA-Z_]
等價於\w
,[^0-9]
等價於\D
。可以利用{}
控制字符重複的次數。例如\d{1,4}
表示1~3位數。{3}
表示3位數字。需要注意的是 “()
”在正則表達式中是特殊符號,如果需要把它們作爲普通字符處理,前面要加轉義符“\
”。
如果要對正則表達式嵌套,就需要使用分組“()
”。例如,對三維數字重複兩次可以使用如下表達式:
(\d\d\d){2}
默認情況下,正則表達式將匹配最長的字符串作爲結果,可以通過在限定符後面添加“?
”的方式,獲取最短的匹配結果。
使用re模塊處理正則表達式
python
的re
模塊具有正則表達式匹配的功能,re
模塊提供了一些根據正則表達式進行查找,替換,分隔字符串的函數,這些函數使用一個正則表達式作爲第一個參數。re
模塊中的一些函數都有一個flags
參數,該參數用於設置匹配的附加選項。例如,是否忽略大小寫,是否支持多行匹配等。re
模塊定義了一些產量表示這些選項,使用前導符“re
”加選項的簡寫或名稱的方式表示某個常量。正則表達式有三種間隔符號:“^
”“$
”“\b
”。“^
”匹配字符串首部的子串,“$
”匹配結束部分的子串,“\b
”用於分割單詞。若正則表達式匹配失敗,則返回“[]
”。這裏提供一段檢測正則表達式是否正確的代碼:
import re
test1 = '需要匹配到的字符串'
if re.match(r'正則表達式', test1):
print('Ok')
else:
print('Failed')
下面通過python
程序來實現電話號碼的匹配:
import re
# 限定符的使用
tel1 = "0791-1234567"
print (re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel1))
tel2 = "010-12345678"
print (re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel2))
tel3 = "(010)12345678"
print (re.findall(r"[\( ]?\d{3}[\]-]?\d{8}|[\( ]?\d{4}[\]-]?\d{7}", tel3))
正則表達式的解析非常費時。如果多次使用統一規則匹配字符串,可以使用compile()
進行預編譯,compile
函數返回一個pattern
對象。該對象擁有一系列方法用於查找,替換或擴展字符串,從而提高字符串的匹配速度。
#compile()預編譯
import re
s = "1abc23def45"
p = re.compile(r"\d+")
print (p.findall(s))
print (p.pattern)