1)正規表示式的常用操作符
操作符說明例項
.表示任何單個字元
字符集,對單個字元給出取值範圍
[abc]表示a、b、c,[a-z]表示a到z單個字元
[^]非字符集,對單個字元給出排除範圍
[^abc]表示非a或b或c的單個字元
*前乙個字元0次或無限次擴充套件
abc*表示ab、abc、abcc、abccc等
+前乙個字元1次或無限次擴充套件
abc+表示abc、abcc、abccc等
?前乙個字元0次或1次擴充套件,非貪婪匹配,匹配到第乙個就結束
abc?表示ab、abc
|左右表示式任意乙個
abc擴充套件前乙個字元m次
abc表示abbc
擴充套件前乙個字元m至n次(含n)
abc表示abc、abbc
^匹配字串開頭
^abc表示abc且在乙個字串的開頭
$匹配字串結尾
abc$表示且在乙個字串的結尾
()分組標記,內部只能使用|操作符
(abc)表示abc,(abc
\d數字,等價於[0-9]
\w單詞字元,匹配數字、字母、下劃線等價於[a-za-z0-9_]
正規表示式的表示型別
2)re庫主要功能函式 函式
說明re.serach()
在乙個字串中搜尋匹配正規表示式的第乙個位置,返回match物件
re.match()
從乙個字串的開始位置起匹配正規表示式,返回match物件
re.findall()
搜尋字串,以列表型別返回全部能匹配的子串
re.split()
將乙個字串按照正規表示式匹配結果進行分隔,返回列表型別
re.finditer()
搜尋字串,返回乙個匹配結果的迭代型別,每個迭代元素是match物件
re.sub()
在乙個字串中替換所有匹配正規表示式的字串,返回替換後的字串
re.compile()
編譯正規表示式,返回乙個物件模式
3)flags:正規表示式使用時的控制標記
常用標記
說明re.i re.ignorecase
忽略大小寫的匹配模式
re.m re.mulltiline
多行模式。改變和$的行為。操作符能夠將給定字串的每行當作匹配開始
re.s re.dotall
此模式下』.'的匹配不受限制,可配配任何字元,包括換行符
re.x
忽略正規表示式中的空白和#號的注釋
4)match object物件的一些常用方法 方法
說明group()
返回被re匹配的字串
groups()
返回乙個包含所有小組字串的元組
start()
返回匹配字串開始的位置
end()
返回匹配字串結束的位置
span()
返回乙個元組,還元組由匹配字串開始和結束的位置組成,即(開始位,結束位)注意,左閉右開
5)match物件的屬性 屬性
說明.string
待匹配的文字
.re匹配時使用的pattern物件(正規表示式)
.pos
正規表示式搜尋文字的開始位置
.endpos
正規表示式搜尋文字的結束位置
a).re.serach(pattern,string,flags = 0)
import re
if match:
print(match.group(0))
b).re.match(pattern,string,flags = 0)
import re
if match:
print(match.group(0))
c).re.findall(pattern,string,flags = 0)
import re
print(ls)
輸出:['100081', '100084']
d).re.split(pattern,string,maxsplit= 0 ,flags = 0)
import re
print(ls)
輸出:['bit ', ' tsu', '']
e).re.finditer(pattern,string,flags=0)
import re
if m:
print(m.group(0))
輸出: 100081
100084
f).re.sub(pattern,repl,string,count = 0,flags=0)
import re
print(s)
輸出:bit zipcode tsuzipcode
g).re.compile(pattern,flags=0)
pat = re.compile(r"a.b",re.i) #忽略大小寫
pat.search('kanbli').group() #方法.group返回乙個或多個匹配的字串
輸出:'anb'
6)最小匹配操作符
操作符說明*?
前乙個字元0次或無限次擴充套件,最小匹配
+?前乙個字元1次或無限次擴充套件,最小匹配
??前乙個字元0次或1次擴充套件,最小匹配
?前乙個字元m次至n(含n)次擴充套件,最小匹配
# 1、
# 2、&bcoffset=3&ntoffset=3&p4ppushleft=1%2c48&s=44
# 3、&bcoffset=0&ntoffset=6&p4ppushleft=1%2c48&s=88
import requests
import re
cookies =
def gethtml(url):
try:
r = requests.get(url,headers = kv,cookies = cookies, timeout = 30)
r.raise_for_status() #如果狀態不是200,引發httperror異常
print(r.request.url)
return r.text
except:
return "爬取失敗"
def parsepage(ilt,html):
try:
plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
for i in range(len(plt)):
price = eval(plt[i].split(":")[1])
tiltle = eval(tlt[i].split(":")[1])
except:
print("解析異常")
def printgoodslist(ilt):
tplt = "\t\t"
print(tplt.format("序號","**","商品名稱"))
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count,g[0],g[1]))
def main():
goods = "書包"
depth = 2 #深度
start_url = "" + goods
infolist=
for i in range(depth):
try:
url = start_url + '&s=' + str(44*i)
html = gethtml(url)
parsepage(infolist,html)
except:
continue
printgoodslist(infolist)
if __name__ == "__main__":
main()
python中正規表示式
python中正規表示式語法與linux中的相容 檢視正規表示式 python提供re模組,包含所有正規表示式的功能。由於python的字串本身也用 轉義,所以要特別注意 s abc 001 python的字串 對應的正規表示式字串變成 abc 001 建議使用python的r字首,就不用考慮轉義的...
Python 中 正規表示式
一 最近要對字串執行很多操作,所以學了正規表示式 不得不說正規表示式對字串的操作還是很給力的 runoob上面的教程 python中的正規表示式 正規表示式教程 python中要使用正規表示式,首先要匯入re模組 import re 二 常用函式 或者說方法 re.match 作用 嘗試從字串的起始...
Python中正規表示式
python re模組正規表示式中常用的字元有兩類 普通字元和11個元字元,元字元表示特定的功能,比如下面的 被括起來的表示式將作為分組,從表示式左邊開始每遇到乙個分組的左括號 編號 1。分組表示式作為乙個整體,可以後接數量詞。表示式中的 僅在該組中有效。那麼我們想匹配表示式中的 字元怎麼辦呢?通過...