學習python的第四十四天-正則表達式

正則表達式

正則表達式用於搜索,替換和解析字符串。正則表達式遵循一定的語法規則,使用非常靈活,功能強大。使用正則表達式編寫一些邏輯驗證非常方便,例如電子郵件地址格式的驗證。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模塊處理正則表達式

pythonre模塊具有正則表達式匹配的功能,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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章