推薦學習:
正規表示式的作用是什麼?我們網頁抓取到的內容很多,我們不可能全部都獲取,只需要其中的一部分內容,因此我們需要使用正則來匹配我們想要的內容。
Python 有一個名為 的內建包re,可用於處理正規表示式。匯入re模組:
import re
匯入re模組後,您可以開始使用正規表示式。
例如:搜尋字串以檢視它是否以「The」開頭並以「Spain」結尾:
import re txt = "The rain in Spain"x = re.search("^The.*Spain$", txt)if x: print("匹配成功!")else: print("匹配失敗")
執行:
當然,你現在看不懂這個例子,既然手把手教學,並不會教大家一步登天。
該findall()函數返回一個包含所有匹配項的列表。
例如:列印所有匹配項的列表
import re txt = "川川菜鳥啊菜鳥啊"x = re.findall("菜鳥", txt)print(x)
執行返回:
該列表按找到的順序包含匹配項。如果未找到匹配項,則返回一個空列表:
import re txt = "菜鳥並不菜"x = re.findall("川川", txt)print(x)if (x): print("匹配成功了喲")else: print("找不到這個呀!")
執行返回:
該search()函數在字串中搜尋匹配項,如果有匹配項,則返回一個Match 物件。如果有多個匹配項,則只返回匹配項的第一次出現。
例如:搜尋字串中的第一個空白字元:
import re txt = "菜鳥 呢"x = re.search("\s", txt)print("第一個空格字元位於位置:", x.start())
執行結果:
如果未找到匹配項,None則返回該值:
import re txt = "天上飛的是菜鳥"x = re.search("川川", txt)print(x)
返回:
該split()函數返回一個列表,其中的字串在每次匹配時被拆分。
例如:在每個空白字元處拆分
import re txt = "菜鳥 學 python"x = re.split("\s", txt)print(x)
執行返回:
您可以通過指定maxsplit 引數來控制出現次數
例如:僅在第一次出現時拆分字串:
import re#Split the string at the first white-space character:txt = "飛起來 菜鳥 們"x = re.split("\s", txt, 1)print(x)
返回:
該sub()函數用您選擇的文字替換匹配項。
例如:用只替換就
import re txt = "學python就找川川菜鳥"x = re.sub("就", "只", txt)print(x)
執行:
您可以通過指定count 引數來控制替換次數 :
例如替換前 2 次出現:
import re txt = "學python就就就川川菜鳥"x = re.sub("就", "只", txt,2)print(x)
返回:
[] 用於一組字元
例如:#按字母順序查詢「a」和「m」之間的所有小寫字元
import re txt = "apple chuanchuan "#按字母順序查詢「a」和「m」之間的所有小寫字元x = re.findall("[a-m]", txt)print(x)
執行:
** 表示特殊序列(也可用於跳脫特殊字元)
例如匹配所有數位:
import re txt = "我今年20歲了"#查詢所有數位字元x = re.findall("\d", txt)print(x)
執行返回:
. 可以任何字元(換行符除外)。
例如:搜尋以「he」開頭、後跟兩個(任意)字元和一個「o」的序列
import re txt = "hello world"#搜尋以「he」開頭、後跟兩個(任意)字元和一個「o」的序列x = re.findall("he..o", txt)print(x)
執行返回:
^符號用於匹配開始。
import re txt = "川川菜鳥 飛起來了"x = re.findall("^川", txt)if x: print("哇,我匹配到了")else: print("哎呀,匹配不了啊")
執行:
$ 符號用於匹配結尾,例如:匹配字串是否以「world」結尾
import re txt = "hello world"#匹配字串是否以「world」結尾x = re.findall("world$", txt)if x: print("匹配成功了耶")else: print("匹配不到哦")
執行:
import re txt = "天上飛的是菜鳥,學python找川川菜鳥!"#檢查字串是否包含「ai」後跟 0 個或多個「x」字元:x = re.findall("菜鳥*", txt)print(x)if x: print("匹配到了!")else: print("氣死了,匹配不到啊")
執行:
+ 用於匹配一次或者多次出現
例如:檢查字串是否包含「菜鳥」後跟 1 個或多個「菜鳥」字元:
import re txt = "飛起來了,菜鳥們!"#檢查字串是否包含「菜鳥」後跟 1 個或多個「菜鳥」字元:x = re.findall("菜鳥+", txt)print(x)if x: print("匹配到了!")else: print("煩死了,匹配不到")
執行:
{} 恰好指定的出現次數
例如:檢查字串是否包含「川」兩個
import re txt = "川川菜鳥並不菜!"#檢查字串是否包含「川」兩個x = re.findall("川{2}", txt)print(x)if x: print("匹配到了兩次的川")else: print("匹配不到啊,帥哥")
返回:
| 匹配兩者任一
例如:匹配字串菜鳥或者是我了
import re txt = "菜鳥們學會python了嗎?串串也是菜鳥啊!"x = re.findall("菜鳥|是我了", txt)print(x)if x: print("匹配到了哦!")else: print("匹配失敗")
執行:
\A : 如果指定的字元位於字串的開頭,則返回匹配項。
例如:匹配以菜字元開頭的字元
import re txt = "菜鳥在這裡"x = re.findall("\A菜", txt)print(x)if x: print("是的匹配到了")else: print("匹配不到")
執行:
\b 返回指定字元位於單詞開頭或結尾的匹配項 (開頭的「r」確保字串被視為原始字串)。
例如:匹配愛開頭
import re txt = "愛你,川川"x = re.findall(r"\b愛", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
執行:
又例如:匹配川結尾
import re txt = "愛你,川川"x = re.findall(r"川\b", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
執行:
\B 返回存在指定字元但不在單詞開頭(或結尾)的匹配項 (開頭的「r」確保字串被視為「原始字串」)
比如我匹配菜鳥:
import re txt = "我是菜鳥我是菜鳥啊"#檢查是否存在「ain」,但不是在單詞的開頭:x = re.findall(r"\菜鳥", txt)print(x)if x: print("匹配到了嘛!!")else: print("匹配不到哇!")
執行:
但是你匹配結尾就會返回空,比如我匹配鳥:
import re txt = "川川菜鳥"#檢查是否存在「鳥」,但不是在單詞的末尾:x = re.findall(r"鳥\B", txt)print(x)if x: print("匹配到了哦")else: print("找不到")
執行:
\d 返回字串包含數位(0-9 之間的數位)的匹配項。
例如:
import re txt = "我今年20歲了啊"#檢查字串是否包含任何位數(0-9的數位)x = re.findall("\d", txt)print(x)if x: print("哇哇哇,匹配到數位了")else: print("找不到哦")
執行:
\D 返回字串不包含數位的匹配項
例如:
import re txt = "我今年20歲"#匹配任何非數位符號x = re.findall("\D", txt)print(x)if x: print("匹配到了,開心!")else: print("匹配不到,生氣")
執行:
\s 返回一個匹配字串包含空白空間字元的匹配項。
例如:
import re txt = "我 是 川 川 菜 鳥"#匹配任何空格字元x = re.findall("\s", txt)print(x)if x: print("匹配到了")else: print("匹配不到啊")
執行:
\S 返回字串不包含空格字元的匹配項
import re txt = "菜鳥是 我 了"#匹配任意非空字元x = re.findall("\S", txt)print(x)if x: print("匹配到了!")else: print("匹配不到啊")
執行:
返回一個匹配,其中字串包含任何單詞字元(從 a 到 Z 的字元,從 0 到 9 的數位,以及下劃線 _ 字元)
例如:
import re txt = "菜鳥啊 是串串呀"#在每個單詞字元(從a到z的字元,0-9的數位)返回匹配項,以及下劃線_字元):x = re.findall("\w", txt)print(x)if x: print("匹配到了啊")else: print("匹配不到哇")
執行:
返回字串不包含任何單詞字元的匹配項,在每個非單詞字元中返回匹配(不在A和Z之間的字元。「!」,「?」空白位等)
例如:
import re txt = "菜鳥 是 我嘛?我不信!!"#在每個非單詞字元中返回匹配(不在A和Z之間的字元。「!」,「?」空白位等):x = re.findall("\W", txt)print(x)if x: print("匹配到了!")else: print("匹配不到啊")
執行:
\Z 如果指定的字元位於字串的末尾,則返回匹配項。
例如:
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("匹配不到")
返回任何小寫字元的匹配項,按字母順序在 a 和 n 之間。
例如:
import re txt = "hello wo r l d"x = re.findall("[a-n]", txt)print(x)if x: print("匹配到了!")else: print("匹配不到")
執行:
同樣的道理,依次其它情況如下:
[^arn] 返回除 a、r 和 n 之外的任何字元的匹配項
[0123] 返回存在任何指定數位(0、1、2 或 3)的匹配項
[0-9] 返回 0 到 9 之間任意數位的匹配項
[0-5][0-9] 返回 00 到 59 中任意兩位數的匹配項
[a-zA-Z] 按字母順序返回 a 和 z 之間的任何字元的匹配,小寫或大寫
[+] 在集合中,+, *, ., |, (), $,{} 沒有特殊含義,所以 [+] 的意思是:返回字串中任意 + 字元的匹配項。這個我i舉個例子:
import re txt = "5+6=11"#檢查字串是否有任何 + 字元:x = re.findall("[+]", txt)print(x)if x: print("匹配到了")else: print("匹配不到")
執行:
匹配物件是包含有關搜尋和結果的資訊的物件。注意:如果沒有匹配,None將返回值,而不是匹配物件。
直接舉個例子:
執行將返回匹配物件的搜尋
import re#search() 函數返回一個 Match 物件:txt = "hello world"x = re.search("wo", txt)print(x)
執行:
Match 物件具有用於檢索有關搜尋和結果的資訊的屬性和方法:
span()返回一個包含匹配開始和結束位置的元組。 string返回傳遞給函數的字串 group()返回字串中匹配的部分
例如:列印第一個匹配項的位置(開始和結束位置)。正規表示式查詢任何以大寫「S」開頭的單詞:
import re#搜尋單詞開頭的大寫「S」字元,並列印其位置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#搜尋單詞開頭的大寫「w」字元,並列印該單詞:txt = "hello world"x = re.search(r"\bw\w+", txt)print(x.group())
執行:
注意:如果沒有匹配,None將返回值,而不是匹配物件。
推薦學習:
以上就是歸納整理python正規表示式解析的詳細內容,更多請關注TW511.COM其它相關文章!