在Python中使用正則表達式
正則表達式讓我們可以在字符串中查找符合特定格式的內容。
通過使用特殊的語法來構建正則表達式,您可以:
- 在字符串中進行搜索
- 在字符串中替換子字符串
- 從字符串中提取信息
re模塊是Python標準庫中的一個工具集,用於處理正則表達式。
特別是它提供了以下函數:
- re.match():檢查字符串開頭的匹配
- re.search():在字符串中查找匹配項
這兩個函數都接受三個參數:模式、要搜索的字符串和標誌。
在介紹如何使用它們之前,讓我們先介紹一下正則表達式模式的基礎知識。
模式是一個以r''定界符包裝的字符串。在其中,我們可以使用一些特殊的字符組合來捕獲我們想要的值。
例如:
- .匹配一個字符(除了換行符)
- \w匹配任何字母數字字符(- [a-zA-Z0-9_])
- \W匹配任何非字母數字字符
- \d匹配任何數字
- \D匹配任何非數字字符
- \s匹配空白字符
- \S匹配任何非空白字符
方括號中可以包含多個字符匹配:[\d\sa] 匹配數字、空白字符和字符a。[a-z] 匹配從a到z的字符。
\ 可用於轉義,例如要匹配點.,在模式中應使用\.。
| 表示“或”。
然後我們有錨點:
- ^匹配一行的開頭
- $匹配一行的結尾
然後我們有數量修改符:
- ?表示“零個或一個”出現
- *表示“零個或多個”出現
- +表示“一個或多個”出現
- {n}表示“正好出現n次”
- {n,}表示“至少出現n次”
- {n, m}表示“至少出現n次,最多出現m次”
括號 (<expression>) 創建一個分組。分組很有趣,因為我們可以捕獲分組的內容。
以下這兩個示例匹配整個字符串:
| 1 | re.match('^.*Roger', 'My dog name is Roger') | 
打印這些語句將得到像這樣的字符串:
| 1 | <re.Match object; span=(0, 20), match='My dog name is Roger'> | 
如果將結果賦值給一個result變量並在其上調用group(),您將看到匹配的結果:
| 1 | result = re.match('^.*Roger', 'My dog name is Roger') | 
讓我們試著獲取狗的名字,如果您不知道狗的名字是什麼,可以搜索“name is”,然後添加一個分組,像這樣:
| 1 | result = re.search('name is (.*)', 'My dog name is Roger') | 
result.group()將打印出“name is Roger”,result.group(1)將打印出分組的內容“Roger”:
| 1 | print(result.group()) # name is Roger | 
我提到re.search()和re.match()接受標誌作為第三個參數。我們有一些可能的標誌,最常用的是re.I,用於執行不區分大小寫的匹配。
這只是正則表達式的入門介紹,從這里開始,您可以深入研究更多內容。
我建議您在https://regex101.com上測試您的正則表達式以確保正確性。請確保在側邊欄中選擇Python版本。

tags: [“Python”, “正則表達式”]