歸納整理python正規表示式解析

2022-03-29 13:00:10
本篇文章給大家帶來了關於的相關知識,其中主要介紹了Python正規表示式的相關問題,總結了包括正規表示式函數、元字元、特殊序列、集合套裝、匹配物件等等,希望對大家有幫助。

推薦學習:

正規表示式的作用是什麼?我們網頁抓取到的內容很多,我們不可能全部都獲取,只需要其中的一部分內容,因此我們需要使用正則來匹配我們想要的內容。

正規表示式模組

Python 有一個名為 的內建包re,可用於處理正規表示式。匯入re模組:

import re

Python中的正規表示式

匯入re模組後,您可以開始使用正規表示式。
例如:搜尋字串以檢視它是否以「The」開頭並以「Spain」結尾:

import re

txt = "The rain in Spain"x = re.search("^The.*Spain$", txt)if x:
  print("匹配成功!")else:
  print("匹配失敗")

執行:
在這裡插入圖片描述
當然,你現在看不懂這個例子,既然手把手教學,並不會教大家一步登天。

正規表示式函數

findall() 函數

該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() 函數

該search()函數在字串中搜尋匹配項,如果有匹配項,則返回一個Match 物件。如果有多個匹配項,則只返回匹配項的第一次出現。
例如:搜尋字串中的第一個空白字元:

import re

txt = "菜鳥 呢"x = re.search("\s", txt)print("第一個空格字元位於位置:", x.start())

執行結果:
在這裡插入圖片描述
如果未找到匹配項,None則返回該值:

import re

txt = "天上飛的是菜鳥"x = re.search("川川", txt)print(x)

返回:
在這裡插入圖片描述

split() 函數

該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() 函數

該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()返回字串中匹配的部分

span函數

例如:列印第一個匹配項的位置(開始和結束位置)。正規表示式查詢任何以大寫「S」開頭的單詞:

import re#搜尋單詞開頭的大寫「S」字元,並列印其位置txt = "The rain in Spain"x = re.search(r"\bS\w+", txt)print(x.span())

執行:
在這裡插入圖片描述

string函數

例如:列印傳遞給函數的字串

import re#返回字串txt = "The rain in Spain"x = re.search(r"\bS\w+", txt)print(x.string)

group函數

例如:列印字串中匹配的部分。正規表示式查詢任何以大寫「S」開頭的單詞

import re#搜尋單詞開頭的大寫「w」字元,並列印該單詞:txt = "hello world"x = re.search(r"\bw\w+", txt)print(x.group())

執行:
在這裡插入圖片描述
注意:如果沒有匹配,None將返回值,而不是匹配物件。

推薦學習:

以上就是歸納整理python正規表示式解析的詳細內容,更多請關注TW511.COM其它相關文章!