正則表達式(RegEx)是一系列字元,形成了一個搜索模式。RegEx 可用於檢查字元串是否包含指定的搜索模式。 RegEx 模塊 Python 中有一個內置的包叫做 re,它可以用於處理正則表達式。導入 re 模塊: import re Python 中的 RegEx,一旦導入了 re 模塊,您就可 ...
正則表達式(RegEx)是一系列字元,形成了一個搜索模式。RegEx 可用於檢查字元串是否包含指定的搜索模式。
RegEx 模塊
Python 中有一個內置的包叫做 re,它可以用於處理正則表達式。導入 re 模塊:
import re
Python 中的 RegEx,一旦導入了 re 模塊,您就可以開始使用正則表達式了。
示例:搜索字元串以查看它是否以 "The" 開頭並以 "Spain" 結尾:
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
RegEx 函數
re 模塊提供了一組函數,允許我們在字元串中搜索匹配項:
函數 描述
findall 返回包含所有匹配項的列表
search 如果字元串中的任何位置存在匹配項,則返回一個 Match 對象
split 返回一個列表,其中字元串已在每個匹配項處拆分
sub 用字元串替換一個或多個匹配項
元字元
元字元是具有特殊含義的字元:
字元 描述 示例
[] 一組字元 "[a-m]"
\ 表示特殊序列(也可以用於轉義特殊字元) "\d"
. 任何字元(除換行符之外的任何字元) "he..o"
^ 以...開始 "^hello"
$ 以...結束 "planet$"
- 零次或多次出現 "he.*o"
- 一次或多次出現 "he.+o"
? 零次或一次出現 "he.?o"
{} 指定次數的出現次數 "he.{2}o"
| 要麼是...,要麼是... "falls|stays"
() 捕獲和分組
特殊序列
特殊序列是一個 \ 後面跟著下麵列表中的一個字元,具有特殊含義:
字元 描述 示例
\A 如果指定的字元位於字元串的開頭,則返回一個匹配項 "\AThe"
\b 返回指定字元在單詞的開頭或結尾的匹配項
(開頭的 "r" 確保字元串被視為“原始字元串”) r"\bain"
r"ain\b"
\B 返回指定字元存在但不在單詞的開頭(或結尾)的匹配項
(開頭的 "r" 確保字元串被視為“原始字元串”) r"\Bain"
r"ain\B"
\d 返回字元串包含數字(0-9)的匹配項 "\d"
\D 返回字元串不包含數字的匹配項 "\D"
\s 返回字元串包含空白字元的匹配項 "\s"
\S 返回字元串不包含空白字元的匹配項 "\S"
\w 返回字元串包含任何單詞字元的匹配項(從 a 到 Z,從 0 到 9,以及下劃線 _ 字元) "\w"
\W 返回字元串不包含任何單詞字元的匹配項 "\W"
\Z 如果指定的字元位於字元串的末尾,則返回一個匹配項 "Spain\Z"
集合
集合是一個放在一對方括弧 [] 中的一組字元,具有特殊含義:
集合 描述
[arn] 返回一個匹配項,其中存在指定的字元(a、r 或 n)
[a-n] 返回任何小寫字元的匹配項,字母順序在 a 和 n 之間
[^arn] 返回除 a、r 和 n 之外的任何字元的匹配項
[0123] 返回字元串中存在任何指定的數字(0、1、2 或 3)的匹配項
[0-9] 返回字元串中存在任何數字(0 到 9)的匹配項
[0-5][0-9] 返回字元串中存在任何兩位數的匹配項,介於 00 和 59 之間
[a-zA-Z] 返回任何字母字元的匹配項,字母順序在 a 到 z 之間,不區分大小寫
[+] 在集合中,+、*、.、|、()、$、{} 沒有特殊含義,因此 [+] 意味著:返回字元串中的任何 + 字元的匹配項
findall() 函數
findall() 函數返回一個包含所有匹配項的列表。
示例:列印所有匹配項的列表:
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
該列表按照找到的順序包含匹配項。如果沒有找到匹配項,則返回一個空列表:
示例:如果未找到匹配項,則返回一個空列表:
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
search() 函數
search() 函數在字元串中搜索匹配項,如果有匹配項,則返回一個 Match 對象。如果有多個匹配項,只會返回第一個匹配項:
示例:搜索字元串中的第一個空格字元:
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("第一個空格字元位於位置:", x.start())
如果沒有找到匹配項,則返回值為 None:
示例:進行一個不會返回匹配項的搜索:
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
split() 函數
split() 函數返回一個列表,其中字元串已在每個匹配項處拆分:
示例:在每個空格字元處拆分:
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
您可以通過指定 maxsplit 參數來控制出現的次數:
示例:僅在第一個匹配項處拆分字元串:
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
sub() 函數
sub() 函數用您選擇的文本替換匹配項:
示例:用數字 9 替換每個空格字元:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
您可以通過指定 count 參數來控制替換的次數:
示例:替換前兩個匹配項:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
Match 對象
Match 對象是一個包含有關搜索和結果的信息的對象。
註意:如果沒有匹配項,將返回值 None,而不是 Match 對象。
示例:執行一個將返回 Match 對象的搜索:
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) # 這將列印一個對象
Match 對象具有屬性和方法,用於檢索有關搜索和結果的信息:
.span()
返回一個包含匹配項的起始位置和結束位置的元組。.string
返回傳遞給函數的字元串。.group()
返回字元串中存在匹配項的部分。
示例:列印第一個匹配項的位置(起始位置和結束位置)。正則表達式查找以大寫字母 "S" 開頭的任何單詞:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
示例:列印傳遞給函數的字元串:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
示例:列印存在匹配項的字元串部分。正則表達式查找以大寫字母 "S" 開頭的任何單詞:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:公眾號搜索Let us Coding
,或者掃描下方二維碼,關註公眾號,即可獲取最新文章。
看完如果覺得有幫助,歡迎點贊、收藏和關註