正則表達式讓我們可以在字符串中查找符合特定格式的內容。
通過使用特殊的語法來構建正則表達式,您可以:
- 在字符串中進行搜索
- 在字符串中替換子字符串
- 從字符串中提取信息
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>) 創建一個分組。分組很有趣,因為我們可以捕獲分組的內容。
以下這兩個示例匹配整個字符串:
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版本。