Python 正則表達式(RegEx)


版權所有,未經許可,禁止轉載


章節


正則表達式是組成搜索模式的字符序列。

正則表達式用於按指定的搜索模式搜索字符串。

正則表達式(RegEx)模塊

Python有一個名為re的內置包,用來處理正則表達式。

示例

導入re模塊:

import re

Python中的正則表達式

導入re模塊后,就可以開始使用正則表達式:

示例

搜索字符串,查看是否以“the”開頭,以“Spain”結尾:

import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

正則表達式函數

re模塊提供了一組函數,用於搜索匹配的字符串:

函數 描述
findall 返回包含所有匹配項的列表
search 如果文本中有匹配項,則返回匹配對象
split 使用字符串分割文本,返回文本被分割后的列表
sub 用字符串替換一個或多個匹配項/td>

元字符

元字符是具有特殊意義的字符:

字符 描述 例子
[] 字符集合 "[a-m]"
\ 標志特殊轉義字符(也可以用來轉義特定字符) "\d"
. 任何字符(換行字符除外) "he..o"
^ 開始文本 "^hello"
$ 結束文本 "world$"
* 0次或多次出現 "aix*"
+ 1次或多次出現 "aix+"
{} 確定的出現次數 "al{2}"
| 或者 "falls|stays"
() 捕獲並分組  

特殊轉義字符

特殊轉義字符是\后面跟着下面列表中的某個字符,有特殊的含義:

字符 描述 例子
\A 如果指定字符串位於文本的開頭,則返回匹配項 "\AThe"
\b 如果指定字符串位於文本開頭或結尾,則返回匹配項 r"\bain"
r"ain\b"
\B 如果指定字符串沒有位於文本開頭或結尾,則返回匹配項 r"\Bain"
r"ain\B"
\d 如果文本中包含了數字(0-9),返回匹配項 "\d"
\D 如果文本中不包含數字(0-9),返回匹配項 "\D"
\s 返回文本中包含空白字符的匹配項 "\s"
\S 返回文本中不包含空白字符的匹配項 "\S"
\w 如果文本中包含任何單詞字符(從a到Z的字符,從0到9的數字,以及下划線_字符),返回匹配項 "\w"
\W 如果文本中不包含任何單詞字符(從a到Z的字符,從0到9的數字,以及下划線_字符),返回匹配項 "\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

str = "The rain in Spain"
x = re.findall("ai", str)
print(x)

列表中的匹配項按找到的順序排序。

如果沒有找到匹配項,返回一個空列表:

示例

打印所有匹配項的列表:

import re

str = "The rain in Spain"
x = re.findall("Portugal", str)
print(x)

search() 函數

search() 搜索文本中的匹配項,如果有匹配項,返回匹配對象。

如果有多個匹配項,只返回第一個:

示例

搜索文本中的第一個空白字符:

import re

str = "The rain in Spain"
x = re.search("\s", str)

print("第一個空白字符位於:", x.start())

如果沒有找到匹配項,則返回None值:

示例

不匹配:

import re

str = "The rain in Spain"
x = re.search("Portugal", str)
print(x)

split() 函數

split()函數使用字符串分割文本,返回文本被分割后的列表:

示例

在每個空白字符處分割文本:

import re

str = "The rain in Spain"
x = re.split("\s", str)
print(x)

可以通過指定maxsplit參數來控制分割次數:

示例

只在第一次匹配時分割字符串:

import re

str = "The rain in Spain"
x = re.split("\s", str, 1)
print(x)

sub() Function

將匹配項替換為指定文本:

示例

用數字9替換每個空白字符:

import re

str = "The rain in Spain"
x = re.sub("\s", "9", str)
print(x)

可以通過count參數來控制替換的數量:

示例

替換前兩項:

import re

str = "The rain in Spain"
x = re.sub("\s", "9", str, 2)
print(x)

匹配對象

匹配對象是一個包含搜索和結果信息的對象。

注意: 如果沒有匹配,則返回None值,而不是匹配對象。

示例

搜索一下,將返回一個匹配對象:

import re

str = "The rain in Spain"
x = re.search("ai", str)
print(x) #打印對象

匹配對象具有用於檢索搜索信息的屬性和方法:

  • .span() 返回一個元組,其中包含匹配項的開始和結束位置。
  • .string 返回傳遞給函數的文本
  • .group() 返回文本中匹配的部分

示例

打印第一個匹配項的位置(開始和結束位置)。

正則表達式查找任何以大寫字母“S”開頭的單詞:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.span())

示例

打印傳入函數的文本:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.string)

示例

打印文本中匹配的部分。

正則表達式查找任何以大寫字母“S”開頭的單詞:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.group())

注意: 如果沒有匹配,則返回None值,而不是匹配對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM