python 中的 re 模塊提供核心正則表達式處理功能,常用方法包括:1. re.match() 從字符串開頭匹配;2. re.search() 掃描整個字符串找到第一個匹配;3. re.findall() 返回所有匹配結果組成的列表;4. re.sub() 替換匹配內容并支持分組引用;5. re.split() 根據匹配分割字符串。其中 match 只在開頭匹配失敗則返回 none,search 則在整個字符串查找首個匹配,findall 能提取多個匹配項,sub 支持高級替換技巧如日期格式轉換,這些函數結合正則語法能高效解決字符串處理問題。
python 中的 re 模塊是處理正則表達式的核心工具,能幫我們高效地匹配、查找和替換文本內容。如果你經常需要處理字符串數據,掌握 re 模塊的基本用法非常有必要。
一、常用方法有哪些?幾個核心函數要記住
re 模塊提供了多個處理正則表達式的函數,最常用的有以下幾個:
- re.match():從字符串起始位置開始匹配,不匹配就返回 None。
- re.search():掃描整個字符串,找到第一個匹配的位置。
- re.findall():返回所有匹配結果,組成一個列表。
- re.sub():用于替換匹配到的字符串。
- re.split():根據匹配內容分割字符串。
這些函數基本能滿足日常文本處理的需求。比如你想要提取一段日志中的 IP 地址,或者驗證用戶輸入是否符合郵箱格式,都可以用這些方法來完成。
二、match 和 search 的區別,別搞混了
這兩個方法容易混淆,但它們的行為差別挺大的:
立即學習“Python免費學習筆記(深入)”;
- re.match(r’pattern’, String) 只會在字符串開頭嘗試匹配,一旦開頭不符合,就直接失敗。
- re.search(r’pattern’, string) 會遍歷整個字符串,只要中間有一處匹配就成功。
舉個例子:
import re text = "abc123xyz" print(re.match(r'd+', text)) # 返回 None,因為開頭不是數字 print(re.search(r'd+', text)) # 匹配到 '123'
所以當你不確定目標字符串的位置時,建議優先使用 search()。
三、findall 能快速提取多個匹配項
如果你需要一次性提取所有符合條件的內容,findall 是個好選擇。它返回的是一個列表,沒有匹配就返回空列表。
例如,想從一段文本中提取所有的郵箱地址:
text = "聯系我: user1@example.com, admin@site.org 或 support@test.co" emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}', text) print(emails) # 輸出 ['user1@example.com', 'admin@site.org', 'support@test.co']
這個正則表達式雖然看起來有點復雜,但結構清晰,適用于大多數郵箱格式匹配。
四、sub 替換文本很方便,注意分組引用技巧
re.sub() 不僅可以做簡單的替換,還能結合分組進行高級操作。比如你想把日期格式從 yyYY-MM-DD 改成 DD/MM/YYYY:
text = "今天的日期是 2025-04-05" new_text = re.sub(r'(d{4})-(d{2})-(d{2})', r'3/2/1', text) print(new_text) # 輸出 "今天的日期是 05/04/2025"
這里用到了分組(括號)和反向引用 1, 2, 3,這種技巧在處理結構化文本時特別有用。
基本上就這些。掌握了這幾個常用函數,再配合正則表達式的語法,就能解決大部分字符串處理問題了。用得多了你會發現,看似復雜的邏輯其實也就那幾個套路。