正則表達式(Regular Expression),簡稱Regex或RegExp,是一種用來匹配字符串的強大工具。Python內置的re模塊可以讓我們輕鬆使用正則表達式對字符串進行檢索、替換、分割等操作,這為文本處理提供了很大的便利。
一、基礎語法
正則表達式是由普通字符和一些特殊字符組成的,可以用來描述字符的特徵、數量、出現次序等。下面是一些基礎的正則表達式。
. 匹配任意字符,不包括換行符 \w 匹配字母、數字或下劃線 \s 匹配任意空白字符,包括空格、製表符、換頁符等 \d 匹配數字 ^ 匹配字符串的開始 $ 匹配字符串的結束 [] 匹配中括號中的任意一個字符 | 匹配 | 左右兩側的任意一個正則表達式 () 分組,可以對一部分正則表達式進行操作 * 匹配前面的表達式0次或多次 + 匹配前面的表達式1次或多次 ? 匹配前面的表達式0次或1次 {n} 匹配前面的表達式n次 {n,} 匹配前面的表達式至少n次 {n,m} 匹配前面的表達式n次到m次
例如,我們使用正則表達式 \d{3}-\d{5}
來匹配郵政編碼,其中 \d 表示匹配數字,{3}表示匹配3次,-表示匹配橫杆。這裡的正則表達式的意思是先匹配3個數字,再匹配一個橫杆,然後再匹配5個數字。
二、常用操作
re模塊提供了很多常用的操作函數,這裡介紹3個最常用的操作:search、match和sub。
1. search
search函數用來檢索字符串中是否有符合正則表達式的內容,如果查找成功,返回一個Match對象,否則返回None。
import re # 查找郵箱地址 text = "我的郵箱是lichang@mail.com。" pattern = r'\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}' result = re.search(pattern, text) if result: print(result.group()) # 輸出lichang@mail.com else: print("未找到郵箱地址。")
2. match
match函數用來判斷字符串開頭是否符合正則表達式,如果符合,返回一個Match對象,否則返回None。
import re # 檢查手機號碼 text = "我的手機號碼是18012345678。" pattern = r'^1\d{10}$' result = re.match(pattern, text) if result: print(result.group()) # 輸出18012345678 else: print("未找到手機號碼。")
3. sub
sub函數用來替換字符串中符合正則表達式的內容。
import re # 替換字符串 text = "I love Python!" pattern = r'\bPython\b' result = re.sub(pattern, "Java", text) print(result) # 輸出I love Java!
三、高級應用
正則表達式還有很多高級應用,這裡介紹3個最常見的:分組、零寬斷言和貪婪與非貪婪匹配。
1. 分組
正則表達式使用 () 來進行分組,可以對分組內容進行重複或者替換。
import re # 替換文字 text = "2019年10月10日" pattern = r'(\d{4})年(\d{2})月(\d{2})日' result = re.sub(pattern, r'\1-\2-\3', text) print(result) # 輸出2019-10-10
2. 零寬斷言
零寬斷言指的是匹配內容的前面或者後面應該滿足一定的條件,但是這些條件不包括在匹配結果中。
import re # 查找http鏈接 text = "我的個人網站是http://www.lichang.net,歡迎來訪問。" pattern = r'(?<=http://)[a-zA-Z0-9]+\.[a-zA-Z]+' result = re.search(pattern, text) if result: print(result.group()) # 輸出www.lichang.net else: print("未找到鏈接。")
3. 貪婪與非貪婪匹配
正則表達式默認是貪婪模式,即儘可能多地匹配內容。非貪婪模式使用 ? 來標識,表示儘可能少地匹配內容。
import re # 正則表達式在匹配字符串時儘可能多地匹配內容 text = "Title
" pattern = r'' result = re.match(pattern, text) print(result.group()) # 輸出Title
# 正則表達式在匹配字符串時儘可能少地匹配內容 text = "Title
" pattern = r'' result = re.match(pattern, text) print(result.group()) # 輸出
四、總結
正則表達式是一種強大的文本處理工具,能夠為Python程序員提供很大的便利。Python內置的re模塊可以讓我們輕鬆使用正則表達式對字符串進行檢索、替換、分割等操作。雖然正則表達式也有一些坑,但是只要我們理解了基本語法和常用操作,就可以快速地解決很多文本處理問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246405.html