Python正則表達式完全指南 Python正則匹配規則詳解

正則表達式python中處理文本的強大工具,通過re模塊實現字符串匹配、查找和替換?;咀址ヅ淙鏰只匹配字母a,而元字符如.匹配任意字符,d匹配數字,w匹配單詞字符,s匹配空白符,若需匹配元字符本身則使用轉義,例如用.匹配點號。例如,手機號可表示為r’d{11}’。分組用()實現,如r'(d{4})-(d{2})-(d{2})’提取年月日,也可命名分組如(?pd{4})以便通過名字訪問。使用建議包括:貪婪模式默認盡可能多匹配,可用?變為非貪婪;錨點^和$確保整體匹配;多行匹配需加re.dotall標志使.包含換行;常用函數有re.match()從開頭匹配,re.search()查找首個匹配,re.findall()獲取所有結果,re.sub()用于替換。掌握這些能顯著提升數據清洗與分析效率。

Python正則表達式完全指南 Python正則匹配規則詳解

正則表達式是處理文本的強大工具,尤其在python中,通過re模塊可以靈活地進行字符串匹配、查找和替換。掌握它的基本規則和用法,能極大提升數據清洗、日志分析等任務的效率。


匹配基礎:字符與元字符

正則最基礎的是字符匹配,比如寫一個a就只會匹配字母a。但真正有用的是元字符,它們有特殊含義。例如:

  • . 匹配任意單個字符(除了換行符)
  • d 匹配數字,等價于[0-9]
  • w 匹配單詞字符,包括字母、數字和下劃線
  • s 匹配空白字符,如空格、制表符、換行

如果你要匹配這些元字符本身,比如想查找一個點號.,就需要用.來轉義。

立即學習Python免費學習筆記(深入)”;

舉個例子,想匹配手機號碼(假設是11位數字),可以寫成:

import re pattern = r'd{11}' text = '我的電話是13812345678' match = re.search(pattern, text)

這樣就能提取出電話號碼。


分組與捕獲:讓結構更清晰

有時候我們不只是要判斷是否匹配,還想從中提取特定部分。這時候可以用分組,用小括號()包裹需要的部分。

比如你想從一段文本中提取年月日:

pattern = r'(d{4})-(d{2})-(d{2})' text = '日期是 2024-03-15' match = re.search(pattern, text) year, month, day = match.groups()

這里每個括號就是一個分組,分別對應年、月、日。你也可以給分組命名,比如:

pattern = r'(?P<year>d{4})-(?P<month>d{2})-(?P<day>d{2})'

這樣之后可以通過名字訪問:

match.group('year')  # 返回 '2024'

常見陷阱與使用建議

正則雖然強大,但也容易踩坑。以下是一些實用建議:

  • 貪婪 vs 非貪婪:默認情況下,像.*這樣的表達式會盡可能多地匹配內容,這可能不是你想要的??梢栽诤竺婕觽€?變成非貪婪模式,例如.*?。
  • 錨點很重要:如果你想確保整個字符串都符合某個模式,而不是其中一部分,記得加上^開頭和$結尾。
  • 多行匹配注意換行符:默認.不匹配換行符,如果想讓它也匹配,可以加上re.DOTALL標志。
  • 測試正則表達式:可以先用在線工具(如regex101.com)測試你的表達式是否正確,避免反復調試代碼。

舉個小例子:你想匹配以“hello”開頭、以“world”結尾的句子,可以寫成:

pattern = r'^hello.*world$'

但如果中間可能有多行,應該加上re.DOTALL:

re.search(pattern, text, re.DOTALL)

總結一下常用函數

Python的re模塊有幾個常用的函數,用途各有不同:

  • re.match():從字符串開頭開始匹配,不匹配開頭直接返回None
  • re.search():掃描整個字符串,找到第一個匹配項
  • re.findall():返回所有匹配的結果,適合提取多個值
  • re.sub():替換匹配的內容,常用于清理文本

基本上就這些核心功能了,熟練掌握后就可以應對大多數文本處理場景。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享