正則表達式讓我們可以在字符串中查找符合特定格式的內容。
通過使用特殊的語法來構建正則表達式,您可以:
- 在字符串中進行搜索
- 在字符串中替換子字符串
- 從字符串中提取信息
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版本。