正則表達式讓我們可以在字符串中查找符合特定格式的內容。

通過使用特殊的語法來構建正則表達式,您可以:

  • 在字符串中進行搜索
  • 在字符串中替換子字符串
  • 從字符串中提取信息

re模塊是Python標準庫中的一個工具集,用於處理正則表達式。

特別是它提供了以下函數:

  • re.match():檢查字符串開頭的匹配
  • re.search():在字符串中查找匹配項

這兩個函數都接受三個參數:模式、要搜索的字符串標誌

在介紹如何使用它們之前,讓我們先介紹一下正則表達式模式的基礎知識。

模式是一個以r''定界符包裝的字符串。在其中,我們可以使用一些特殊的字符組合來捕獲我們想要的值。

例如:

  • . 匹配一個字符(除了換行符)
  • \w 匹配任何字母數字字符([a-zA-Z0-9_]
  • \W 匹配任何非字母數字字符
  • \d 匹配任何數字
  • \D 匹配任何非數字字符
  • \s 匹配空白字符
  • \S 匹配任何非空白字符

方括號中可以包含多個字符匹配:[\d\sa] 匹配數字、空白字符和字符a[a-z] 匹配從az的字符。

\ 可用於轉義,例如要匹配點.,在模式中應使用\.

| 表示“或”。

然後我們有錨點:

  • ^ 匹配一行的開頭
  • $ 匹配一行的結尾

然後我們有數量修改符:

  • ? 表示“零個或一個”出現
  • * 表示“零個或多個”出現
  • + 表示“一個或多個”出現
  • {n} 表示“正好出現n次”
  • {n,} 表示“至少出現n次”
  • {n, m} 表示“至少出現n次,最多出現m次”

括號 (<expression>) 創建一個分組。分組很有趣,因為我們可以捕獲分組的內容。

以下這兩個示例匹配整個字符串:

re.match('^.*Roger', 'My dog name is Roger')
re.match('.*', 'My dog name is Roger')

打印這些語句將得到像這樣的字符串:

<re.Match object; span=(0, 20), match='My dog name is Roger'>

如果將結果賦值給一個result變量並在其上調用group(),您將看到匹配的結果:

result = re.match('^.*Roger', 'My dog name is Roger')
print(result.group())

讓我們試著獲取狗的名字,如果您不知道狗的名字是什麼,可以搜索“name is”,然後添加一個分組,像這樣:

result = re.search('name is (.*)', 'My dog name is Roger')

result.group()將打印出“name is Roger”,result.group(1)將打印出分組的內容“Roger”:

print(result.group()) # name is Roger
print(result.group(1)) # Roger

我提到re.search()re.match()接受標誌作為第三個參數。我們有一些可能的標誌,最常用的是re.I,用於執行不區分大小寫的匹配。

這只是正則表達式的入門介紹,從這里開始,您可以深入研究更多內容。

我建議您在https://regex101.com上測試您的正則表達式以確保正確性。請確保在側邊欄中選擇Python版本。