如何在 Python 中使用正規表示式 (Regex)
使用內建的 re 模組掌握 Python 正規表示式。學習字串匹配、模式搜尋、尋找所有匹配項以及文字替換。
概述
正規表示式(通常稱為 regex)是功能強大的模板,用於根據特定模式來匹配、搜尋和操作文字字串。正規表示式廣泛用於電子郵件驗證、電話號碼驗證、網頁抓取、日誌解析以及搜尋和替換文字任務。 Python 透過內建的「re」模組提供完整的正規表示式功能。
`re` 模組根據您的目標提供幾個主要功能。 `re.search(pattern, string)` 函數掃描字串並傳回模式第一次出現的符合物件。 `re.match(pattern, string)` 函數類似,但僅從字串的開頭進行搜尋。如果要檢索文字區塊中模式的所有實例,`re.findall(pattern, string)` 將它們作為字串清單傳回。
正規表示式模式利用特殊的元字符,例如“\d”表示數字,“\w”表示字母數字字符,“+”表示一次或多次出現,“*”表示零次或多次出現。在 Python 中編寫正規表示式時,標準做法是使用原始字串文字(以 `r` 為前綴,例如 `r"\d+"`)以防止 Python 將反斜線視為轉義序列。
程式碼和執行輸出
該腳本演示了驗證格式結構、提取數字標記以及使用 re 模組替換匹配的模式。
regex_demo.py
在編輯器中嘗試import re
# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"
match = re.search(pattern_port, log_message)
if match:
print("Found port pattern:", match.group())
# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)
# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)端子輸出
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25逐步實施
- 導入內建的 re 模組。
- 使用原始字串定義正規表示式搜尋模式,例如 r"\d+" 以避免轉義序列問題。
- 使用 re.search() 尋找第一個符合項,或使用 re.findall() 收集所有符合的子字串。
- 使用 re.sub(pattern, replacement, string) 在文字內執行基於模式的替換。
常見問題解答
對正規表示式模式使用原始字串 (r"...") 有什麼好處?
原始字串將反斜線視為文字字元而不是轉義字元。例如,r"\n" 表示反斜線後面跟著“n”,而“\n”表示換行符。
如何檢查正規表示式匹配是否成功?
re.search() 和 re.match() 如果成功則傳回一個符合對象,如果沒有找到符合則傳回 None 。您應該使用條件語句檢查結果(例如,if match:)。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。