本篇文章給大家?guī)砹岁P(guān)于python的相關(guān)知識(shí),其中主要介紹了Python正則表達(dá)式的相關(guān)問題,總結(jié)了包括正則表達(dá)式函數(shù)、元字符、特殊序列、集合套裝、匹配對(duì)象等等,希望對(duì)大家有幫助。
推薦學(xué)習(xí):python教程
正則表達(dá)式的作用是什么?我們網(wǎng)頁抓取到的內(nèi)容很多,我們不可能全部都獲取,只需要其中的一部分內(nèi)容,因此我們需要使用正則來匹配我們想要的內(nèi)容。
正則表達(dá)式模塊
Python 有一個(gè)名為 的內(nèi)置包re,可用于處理正則表達(dá)式。導(dǎo)入re模塊:
import re
Python中的正則表達(dá)式
導(dǎo)入re模塊后,您可以開始使用正則表達(dá)式。
例如:搜索字符串以查看它是否以“The”開頭并以“Spain”結(jié)尾:
import re txt = "The rain in Spain"x = re.search("^The.*Spain$", txt)if x: print("匹配成功!")else: print("匹配失敗")
運(yùn)行:
當(dāng)然,你現(xiàn)在看不懂這個(gè)例子,既然手把手教學(xué),并不會(huì)教大家一步登天。
正則表達(dá)式函數(shù)
findall() 函數(shù)
該findall()函數(shù)返回一個(gè)包含所有匹配項(xiàng)的列表。
例如:打印所有匹配項(xiàng)的列表
import re txt = "川川菜鳥啊菜鳥啊"x = re.findall("菜鳥", txt)print(x)
運(yùn)行返回:
該列表按找到的順序包含匹配項(xiàng)。如果未找到匹配項(xiàng),則返回一個(gè)空列表:
import re txt = "菜鳥并不菜"x = re.findall("川川", txt)print(x)if (x): print("匹配成功了喲")else: print("找不到這個(gè)呀!")
運(yùn)行返回:
search() 函數(shù)
該search()函數(shù)在字符串中搜索匹配項(xiàng),如果有匹配項(xiàng),則返回一個(gè)Match 對(duì)象。如果有多個(gè)匹配項(xiàng),則只返回匹配項(xiàng)的第一次出現(xiàn)。
例如:搜索字符串中的第一個(gè)空白字符:
import re txt = "菜鳥 呢"x = re.search("s", txt)print("第一個(gè)空格字符位于位置:", x.start())
運(yùn)行結(jié)果:
如果未找到匹配項(xiàng),None則返回該值:
import re txt = "天上飛的是菜鳥"x = re.search("川川", txt)print(x)
返回:
split() 函數(shù)
該split()函數(shù)返回一個(gè)列表,其中的字符串在每次匹配時(shí)被拆分。
例如:在每個(gè)空白字符處拆分
import re txt = "菜鳥 學(xué) python"x = re.split("s", txt)print(x)
運(yùn)行返回:
您可以通過指定maxsplit 參數(shù)來控制出現(xiàn)次數(shù)
例如:僅在第一次出現(xiàn)時(shí)拆分字符串:
import re#Split the string at the first white-space character:txt = "飛起來 菜鳥 們"x = re.split("s", txt, 1)print(x)
返回:
sub() 函數(shù)
該sub()函數(shù)用您選擇的文本替換匹配項(xiàng)。
例如:用只替換就
import re txt = "學(xué)python就找川川菜鳥"x = re.sub("就", "只", txt)print(x)
運(yùn)行:
您可以通過指定count 參數(shù)來控制替換次數(shù) :
例如替換前 2 次出現(xiàn):
import re txt = "學(xué)python就就就川川菜鳥"x = re.sub("就", "只", txt,2)print(x)
返回:
元字符
列表符號(hào)
[] 用于一組字符
例如:#按字母順序查找“a”和“m”之間的所有小寫字符
import re txt = "apple chuanchuan "#按字母順序查找“a”和“m”之間的所有小寫字符x = re.findall("[a-m]", txt)print(x)
運(yùn)行:
轉(zhuǎn)義符
** 表示特殊序列(也可用于轉(zhuǎn)義特殊字符)
例如匹配所有數(shù)字:
import re txt = "我今年20歲了"#查找所有數(shù)字字符x = re.findall("d", txt)print(x)
運(yùn)行返回:
任意符號(hào)
. 可以任何字符(換行符除外)。
例如:搜索以“he”開頭、后跟兩個(gè)(任意)字符和一個(gè)“o”的序列
import re txt = "hello world"#搜索以“he”開頭、后跟兩個(gè)(任意)字符和一個(gè)“o”的序列x = re.findall("he..o", txt)print(x)
運(yùn)行返回:
開始符
^符號(hào)用于匹配開始。
import re txt = "川川菜鳥 飛起來了"x = re.findall("^川", txt)if x: print("哇,我匹配到了")else: print("哎呀,匹配不了啊")
運(yùn)行:
結(jié)束符
$ 符號(hào)用于匹配結(jié)尾,例如:匹配字符串是否以“world”結(jié)尾
import re txt = "hello world"#匹配字符串是否以“world”結(jié)尾x = re.findall("world$", txt)if x: print("匹配成功了耶")else: print("匹配不到哦")
運(yùn)行:
星號(hào)符
- 星號(hào)符用于匹配零次或者多次出現(xiàn)。
import re txt = "天上飛的是菜鳥,學(xué)python找川川菜鳥!"#檢查字符串是否包含“ai”后跟 0 個(gè)或多個(gè)“x”字符:x = re.findall("菜鳥*", txt)print(x)if x: print("匹配到了!")else: print("氣死了,匹配不到啊")
運(yùn)行:
加號(hào)符
+ 用于匹配一次或者多次出現(xiàn)
例如:檢查字符串是否包含“菜鳥”后跟 1 個(gè)或多個(gè)“菜鳥”字符:
import re txt = "飛起來了,菜鳥們!"#檢查字符串是否包含“菜鳥”后跟 1 個(gè)或多個(gè)“菜鳥”字符:x = re.findall("菜鳥+", txt)print(x)if x: print("匹配到了!")else: print("煩死了,匹配不到")
運(yùn)行:
集合符號(hào)
{} 恰好指定的出現(xiàn)次數(shù)
例如:檢查字符串是否包含“川”兩個(gè)
import re txt = "川川菜鳥并不菜!"#檢查字符串是否包含“川”兩個(gè)x = re.findall("川{2}", txt)print(x)if x: print("匹配到了兩次的川")else: print("匹配不到啊,帥哥")
返回:
或符
| 匹配兩者任一
例如:匹配字符串菜鳥或者是我了
import re txt = "菜鳥們學(xué)會(huì)python了嗎?串串也是菜鳥啊!"x = re.findall("菜鳥|是我了", txt)print(x)if x: print("匹配到了哦!")else: print("匹配失敗")
運(yùn)行:
特殊序列
指定字符
A : 如果指定的字符位于字符串的開頭,則返回匹配項(xiàng)。
例如:匹配以菜字符開頭的字符
import re txt = "菜鳥在這里"x = re.findall("A菜", txt)print(x)if x: print("是的匹配到了")else: print("匹配不到")
運(yùn)行:
指定開頭結(jié)尾
b 返回指定字符位于單詞開頭或結(jié)尾的匹配項(xiàng) (開頭的“r”確保字符串被視為原始字符串)。
例如:匹配愛開頭
import re txt = "愛你,川川"x = re.findall(r"b愛", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
運(yùn)行:
又例如:匹配川結(jié)尾
import re txt = "愛你,川川"x = re.findall(r"川b", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
運(yùn)行:
匹配中間字符
B 返回存在指定字符但不在單詞開頭(或結(jié)尾)的匹配項(xiàng) (開頭的“r”確保字符串被視為“原始字符串”)
比如我匹配菜鳥:
import re txt = "我是菜鳥我是菜鳥啊"#檢查是否存在“ain”,但不是在單詞的開頭:x = re.findall(r"菜鳥", txt)print(x)if x: print("匹配到了嘛!!")else: print("匹配不到哇!")
運(yùn)行:
但是你匹配結(jié)尾就會(huì)返回空,比如我匹配鳥:
import re txt = "川川菜鳥"#檢查是否存在“鳥”,但不是在單詞的末尾:x = re.findall(r"鳥B", txt)print(x)if x: print("匹配到了哦")else: print("找不到")
運(yùn)行:
匹配數(shù)字
d 返回字符串包含數(shù)字(0-9 之間的數(shù)字)的匹配項(xiàng)。
例如:
import re txt = "我今年20歲了啊"#檢查字符串是否包含任何位數(shù)(0-9的數(shù)字)x = re.findall("d", txt)print(x)if x: print("哇哇哇,匹配到數(shù)字了")else: print("找不到哦")
運(yùn)行:
匹配非數(shù)字
D 返回字符串不包含數(shù)字的匹配項(xiàng)
例如:
import re txt = "我今年20歲"#匹配任何非數(shù)字符號(hào)x = re.findall("D", txt)print(x)if x: print("匹配到了,開心!")else: print("匹配不到,生氣")
運(yùn)行:
空格匹配
s 返回一個(gè)匹配字符串包含空白空間字符的匹配項(xiàng)。
例如:
import re txt = "我 是 川 川 菜 鳥"#匹配任何空格字符x = re.findall("s", txt)print(x)if x: print("匹配到了")else: print("匹配不到啊")
運(yùn)行:
匹配非空格
S 返回字符串不包含空格字符的匹配項(xiàng)
import re txt = "菜鳥是 我 了"#匹配任意非空字符x = re.findall("S", txt)print(x)if x: print("匹配到了!")else: print("匹配不到啊")
運(yùn)行:
匹配任意數(shù)字和字母
返回一個(gè)匹配,其中字符串包含任何單詞字符(從 a 到 Z 的字符,從 0 到 9 的數(shù)字,以及下劃線 _ 字符)
例如:
import re txt = "菜鳥啊 是串串呀"#在每個(gè)單詞字符(從a到z的字符,0-9的數(shù)字)返回匹配項(xiàng),以及下劃線_字符):x = re.findall("w", txt)print(x)if x: print("匹配到了啊")else: print("匹配不到哇")
運(yùn)行:
匹配任意非數(shù)字和字母
返回字符串不包含任何單詞字符的匹配項(xiàng),在每個(gè)非單詞字符中返回匹配(不在A和Z之間的字符?!?!”,“?”空白位等)
例如:
import re txt = "菜鳥 是 我嘛?我不信!!"#在每個(gè)非單詞字符中返回匹配(不在A和Z之間的字符。“!”,“?”空白位等):x = re.findall("W", txt)print(x)if x: print("匹配到了!")else: print("匹配不到啊")
運(yùn)行:
匹配結(jié)尾
Z 如果指定的字符位于字符串的末尾,則返回匹配項(xiàng)。
例如:
import re txt = "川川是菜鳥啊"x = re.findall("啊Z", txt)print(x)if x: print("匹配到了哦!")else: print("匹配不到")
集合套裝
指定符范圍匹配
例如集合:[arn]
import re txt = "The rain in Spain"x = re.findall("[arn]", txt)print(x)if x: print("匹配到了!")else: print("匹配不到")
匹配任意范圍內(nèi)小寫字母
返回任何小寫字符的匹配項(xiàng),按字母順序在 a 和 n 之間。
例如:
import re txt = "hello wo r l d"x = re.findall("[a-n]", txt)print(x)if x: print("匹配到了!")else: print("匹配不到")
運(yùn)行:
同樣的道理,依次其它情況如下:
[^arn] 返回除 a、r 和 n 之外的任何字符的匹配項(xiàng)
[0123] 返回存在任何指定數(shù)字(0、1、2 或 3)的匹配項(xiàng)
[0-9] 返回 0 到 9 之間任意數(shù)字的匹配項(xiàng)
[0-5][0-9] 返回 00 到 59 中任意兩位數(shù)的匹配項(xiàng)
[a-zA-Z] 按字母順序返回 a 和 z 之間的任何字符的匹配,小寫或大寫
[+] 在集合中,+, *, ., |, (), $,{} 沒有特殊含義,所以 [+] 的意思是:返回字符串中任意 + 字符的匹配項(xiàng)。這個(gè)我i舉個(gè)例子:
import re txt = "5+6=11"#檢查字符串是否有任何 + 字符:x = re.findall("[+]", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
運(yùn)行:
匹配對(duì)象
匹配對(duì)象是包含有關(guān)搜索和結(jié)果的信息的對(duì)象。注意:如果沒有匹配,None將返回值,而不是匹配對(duì)象。
直接舉個(gè)例子:
執(zhí)行將返回匹配對(duì)象的搜索
import re#search() 函數(shù)返回一個(gè) Match 對(duì)象:txt = "hello world"x = re.search("wo", txt)print(x)
運(yùn)行:
Match 對(duì)象具有用于檢索有關(guān)搜索和結(jié)果的信息的屬性和方法:
span()返回一個(gè)包含匹配開始和結(jié)束位置的元組。 string返回傳遞給函數(shù)的字符串 group()返回字符串中匹配的部分
span函數(shù)
例如:打印第一個(gè)匹配項(xiàng)的位置(開始和結(jié)束位置)。正則表達(dá)式查找任何以大寫“S”開頭的單詞:
import re#搜索單詞開頭的大寫“S”字符,并打印其位置txt = "The rain in Spain"x = re.search(r"bSw+", txt)print(x.span())
運(yùn)行:
string函數(shù)
例如:打印傳遞給函數(shù)的字符串
import re#返回字符串txt = "The rain in Spain"x = re.search(r"bSw+", txt)print(x.string)
group函數(shù)
例如:打印字符串中匹配的部分。正則表達(dá)式查找任何以大寫“S”開頭的單詞
import re#搜索單詞開頭的大寫“w”字符,并打印該單詞:txt = "hello world"x = re.search(r"bww+", txt)print(x.group())
運(yùn)行:
注意:如果沒有匹配,None將返回值,而不是匹配對(duì)象。
推薦學(xué)習(xí):python教程