首頁 > 軟體

python自動化之re模組詳解

2022-01-15 16:02:35

一、re是什麼?

正規表示式是一個特殊的字元序列,能方便的檢查一個字串是否與某種模式匹配。re模組使得python擁有全部的正規表示式功能。

二、re 模組的作用

通過使用正規表示式,可以:
測試字串內的模式。—— 例如,可以測試輸入字串,以檢視字串內是否出現電話號碼模式或信用卡號碼模式。這稱為資料驗證。
替換文字。—— 可以使用正規表示式來識別檔案中的特定文字,完全刪除該文字或者用其他文字替換它。
基於模式匹配從字串中提取子字串。—— 可以查詢檔案內或輸入域內特定的文字。

三、re模組的使用

1、常用方法

  • findAll(): 匹配所有的字串,把匹配結果作為一個列表返回
  • match(): 匹配字串的開始位置,如果開始位置沒有,則返回None
  • search():在字串中搜尋,返回搜尋到的第一個
  • finditer():匹配所有的字串,返回迭代器

2、 元字元

匹配任意字元(除n以外) h. 代表匹配h後的任意一個字元

import re
res = 'h.'
s = 'hello python'
result = re.findall(res, s)
print(result)  # ['he', 'ho']

[] 拿[]中的人任意一個字元,去字串中匹配,匹配到一個返回一個,最後以列表返回

import re
res2 = '[hon]'
s = 'hello python'
result = re.findall(res2, s)
print(result)  # ['h', 'o', 'h', 'o', 'n']

d 匹配數位0-9

import re
res2 = '[d]'
s = 'hell666o pyt999hon'
result = re.findall(res2, s)
print(result)  # ['6', '6', '6', '9', '9', '9']

D 匹配非數位, 包含空格

import re
res2 = '[D]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result)  # ['h', 'e', 'l', 'l', 'o', ' ', ' ', 'p', 'y', 't', 'h', 'o', 'n', ' ']

‘s’ 匹配空白字元

import re
res2 = '[s]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result)  # [' ', ' ', ' ']

‘S’ 匹配非空白字元

import re
res2 = '[S]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result)  # ['h', 'e', 'l', 'l', 'o', '3', '3', '3', '4', 'p', 'y', 't', 'h', 'o', 'n', '8', '8']

w 匹配非特殊字元,即a-z、A-Z、0-9、_、漢字

import re
res2 = '[w]'
s = 'hello#&_ aa 8python中國'
result = re.findall(res2, s)
print(result)  # ['h', 'e', 'l', 'l', 'o', '_', 'a', 'a', '8', 'p', 'y', 't', 'h', 'o', 'n', '中', '國']

W 匹配特殊字元 ( - [email protected]#$&*)空格也屬於特殊字元

import re
res2 = '[W]'
s = '-hello#&_ aa 8python中國'
result = re.findall(res2, s)
print(result)  # ['-', '#', '&', ' ', ' ']

3、多字元匹配

(1)*:匹配前一個字元出現一次,或無限次 貪婪模式

import reres2 = 'h*'s = '-hhello hhh python'result = re.findall(res2, s)print(result)  #['', 'hh', '', '', '', '', '', 'hhh', '', '', '', '', 'h', '', '', '']import re
res2 = 'h*'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result)  #['', 'hh', '', '', '', '', '', 'hhh', '', '', '', '', 'h', '', '', '']

(2) + :匹配前一個字元出現1次或無窮次

import re
res2 = 'h+'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result) # ['hh', 'hhh', 'h']

(3)?: 匹配前一個字元出現0次或者1次,非貪婪模式

import re
res2 = 'h?'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result) # ['', 'h', 'h', '', '', '', '', '', 'h', 'h', 'h', '', '', '', '', 'h', '', '', '']

(4) {n} :匹配前一個字元連續出現n次

import re
res2 = 'https{2}'
s = '-hhello-httpssss-python'
result = re.findall(res2, s)
print(result) # ['httpss'] 
匹配到前一個字元s 連續出現2次

{n,m} :匹配前一個字元出現n-m次

import re
res2 = 'https{1,3}'
s = '-hhello-httpssss-python'
result = re.findall(res2, s)
print(result) # ['httpss']

(5) 貪婪模式和非貪婪模式

正規表示式通常使用於查詢匹配字串。貪婪模式,總是嘗試匹配儘可能多的字元;非貪婪模式正好相反,總是嘗試匹配儘可能少的字元。在"*","?","+","{m,n}"後面加上?,使貪婪變成非貪婪。

(6) | :兩個條件進行匹配,或的關係

import re
res2 = 'he|ll'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['he', 'll']

(7)邊界值:

^ :匹配以哪個字元開頭的

import re
res2 = '^he'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['he']

$ : 匹配以哪個字元結尾的字元

import re
res2 = 'on$'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['on']

4、分組匹配

() :只匹配()裡面的

import re
res2 = '#(w.+?)#'
s = "{'mobile_phone':'#mobile_phone#','pwd':'Aa123456'}"
result = re.findall(res2, s)
print(result)  # ['mobile_phone']

5、match()方法的使用

str = "www.runoob.com"
print(re.match('www', str).span())  # 在起始位置匹配 ,返回匹配到的區間下標  (0,3)
print(re.match('com', str))  # 不在起始位置匹配  None

6、 search():在字串中搜尋,返回搜尋到的第一個

str = "www.runoob.com"
print(re.search('www', str).span())  # 在起始位置匹配 ,返回匹配到的區間下標
print(re.search('com', str).span())  # 不在起始位置匹配

re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函數返回None;而re.search匹配整個字串,直到找到一個匹配。

7、 finditer():

匹配所有的字串,返回迭代器和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為一個迭代器返回。

res = 'h.'
s = 'hello python'
result = re.finditer(res, s)
for str in result:
    print(str.group())
he
ho

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!


IT145.com E-mail:sddin#qq.com