re模組

想吃橙子發表於2019-03-22

re模組

import re

根據正則規則從一段內容中查詢結果

findall

從字串中選出所有能匹配正規表示式規則的內容,以列表的形式返回

ret = re.findall('\d+','alex123yuan234')

print(ret)

search

在字串內查詢匹配,只找到第一個匹配並返回資訊,返回的是一個結果集,要通過group取值,如果沒有匹配到內容,則返回None,group取值會報錯,所以一般不直接列印ret

ret = re.search('\d+','alex123yuan234')

if ret:

  print(ret.group())

match

作用和search一樣,不過只在字串開始處匹配。在search裡的正則規則前加一個 ^  search的功能就和match一樣了

替換

sub

ret = re.sub('\d+','sb','alex84wusir73') # 預設替換所有

ret = re.sub('\d+','sb','alex84wusir73',1) # 寫了1表示替換一次

print(ret)

subn

ret = re.subn('\d+','sb','alex84wusir73')

print(ret) # ('alexsbwusirsb', 2) 返回的是元組,表示替換了兩次

split

ret = re.split('\d+','alex84wusir73yuan')

print(ret)          按照正則規則切割字串

引數說明

引數 正規表示式 待匹配的字串

替換 正則 要換的結果 待匹配的字串

空間方面操作

finditer

ret = re.finditer('\d+','alex84'*200)              返回一個迭代器,內容是結果集

for i in ret:

  print(i.group())                            用group從結果集取值

時間操作方面

compile

對於一個經常被重複使用的正規表示式

我們可以先進行一次編譯

之後只要用到這個表示式就可以直接拿出來用

這樣節省了程式碼的'時間'

par = re.compile('d+')

ret = par.findall('alex84')

print(ret)

分組在正規表示式中發揮的作用

findall和分組

分組在findall當中預設會優先被顯示出來

ret = re.findall('>(\w+)<',r'<title>qqxing<\title>')

print(ret)

如果不想優先,那麼在分組中新增(?:正規規則) 表示取消這個規則的優先顯示

ret = re.findall('\d+(?:\.\d+)?',r'1.23+2.34')

print(ret)

split和分組

會保留被切掉的在分組中的內容

search和分組

ret = re.search(r'<(\w+)>(\w+)<\\(\w+)>',r'<title>qqxing<\title>')

print(ret.group(0)) # 不受到分組的影響

print(ret.group(1))

print(ret.group(2))        可以通過索引取值

在爬蟲\資料清洗的過程中最常用的正規表示式的操作

並不是把我要的內容的正則寫出來

而是把整個頁面都用正則描述下來,然後把需要的內容放在分組裡

這樣就能夠取到想要的內容了

分組命名

 

ret = re.search(r'<(?P<tab1>\w+)>(?P<content>\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group(0))  # 不受到分組的影響
print(ret.group('tab1'))  # 不受到分組的影響
print(ret.group('content'))  # 不受到分組的影響

(?P<名字>分組內容)    給分組命名

print(ret.group('名字')    檢視內容

使用正則解決問題的兩種方式

當我們想匹配的內容混在不想匹配的內容中

只能把不要的也匹配出來 然後去掉不想要的  剩下的就是我們需要的

把整個結構描述下來 對想要的進行分組

ret = re.findall('\d+\.\d+|(\d+)','1-2*(60+(-40.35/5)-(-4*3))')

ret.remove('')

print(ret)

相關文章