Python RegEx
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 | 如果字串中的任何位置都有匹配項,則返回一個 匹配物件 |
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" | 試一試 » |
集合
集合是用一對方括號 []
括起來的字元集,具有特殊含義。
Set | 描述 | 試一試 |
---|---|---|
[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("Portugal", txt)
print(x)
自己動手試一試 »
search() 函式
search()
函式搜尋字串以查詢匹配項,如果找到匹配項,則返回一個 匹配物件。
如果存在多個匹配項,則僅返回第一個匹配項。
示例
搜尋字串中的第一個空格字元
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()
函式返回一個字串在每次匹配處被拆分的列表。
可以透過指定 maxsplit
引數來控制出現次數。
sub() 函式
sub()
函式將匹配項替換為您選擇的文字。
可以透過指定 count
引數來控制替換次數。
匹配物件
匹配物件是包含有關搜尋和結果資訊的物件。
注意: 如果沒有找到匹配項,則返回 None
值,而不是匹配物件。
示例
進行一個會返回匹配物件的搜尋
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) # 這將列印一個物件
自己動手試一試 »
匹配物件具有用於檢索有關搜尋和結果資訊的屬性和方法。
.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())
自己動手試一試 »
注意: 如果沒有找到匹配項,則返回 None
值,而不是匹配物件。