python關于正則表達式re

1.正則表達式 re

成都創(chuàng)新互聯(lián)服務項目包括江寧網(wǎng)站建設、江寧網(wǎng)站制作、江寧網(wǎng)頁制作以及江寧網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,江寧網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到江寧省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

典型的搜索和替換操作要求您提供與預期的搜索結果匹配的確切文本。雖然這種技術對于對靜態(tài)文本執(zhí)行簡單搜索和替換任務可能已經(jīng)足夠了,但它缺乏靈活性,若采用這種方法搜索動態(tài)文本,即使不是不可能,至少也會變得很困難。

通過使用正則表達式,可以:

- 測試字符串內的模式。

例如,可以測試輸入字符串,以查看字符串內是否出現(xiàn)電話號碼模式或信用卡號碼模式。這稱為數(shù)據(jù)驗證。

- 替換文本。

可以使用正則表達式來識別文檔中的特定文本,完全刪除該文本或者用其他文本替換它。

- 基于模式匹配從字符串中提取子字符串。

可以查找文檔內或輸入域內特定的文本。

可以使用正則表達式來搜索和替換標記。

使用正則表達式的優(yōu)勢:

正則表達式是用來簡潔表達一組字符串的表達式

正則表達式是一種通用的字符串表達框架

正則表達式是一種針對字符串表達“簡潔”和“特征”思想的工具

正則表達式可以用來判斷某字符串的特征歸屬

正則表達式在文本處理中十分常用:

同時查找或替換一組字符串

匹配字符串的全部或部分(主要)

1.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|def 表示 abc、def

{m} 擴展前一個字符m次 ,如ab{2}c表示abbc

{m,n} 擴展前一個字符m至n次(含n) ,如ab{1,2}c表示abc、abbc

^ 匹配字符串開頭 ,如^abc表示abc且在一個字符串的開頭

$ 匹配字符串結尾 ,如abc$表示abc且在一個字符串的結尾

( ) 分組標記,內部只能使用 | 操作符 ,如(abc)表示abc,(abc|def)表示abc、def

\d 數(shù)字,等價于[0‐9]

\w 單詞字符,等價于[A‐Za‐z0‐9_]

1.3 正則表達式re庫的使用

調用方式:import re

re庫采用raw string類型表示正則表達式,表示為:r’text’,raw string是不包含對轉義符再次轉義的字符串;

1.4 re庫的主要功能函數(shù):

re.search() 在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象

re.search(pattern, string, flags=0)

re.match() 從一個字符串的開始位置起匹配正則表達式,返回match對象

re.match(pattern, string, flags=0)

re.findall() 搜索字符串,以列表類型返回全部能匹配的子串

re.findall(pattern, string, flags=0)

re.split() 將一個字符串按照正則表達式匹配結果進行分割,返回列表類型

re.split(pattern, string, maxsplit=0, flags=0)

re.finditer() 搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象

re.finditer(pattern, string, flags=0)

re.sub() 在一個字符串中替換所有匹配正則表達式的子串,返回替換后的字符串

re.sub(pattern, repl, string, count=0, flags=0)

flags : 正則表達式使用時的控制標記:

re.I --> re.IGNORECASE : 忽略正則表達式的大小寫,[A‐Z]能夠匹配小寫字符

re.M --> re.MULTILINE : 正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始

re.S --> re.DOTALL : 正則表達式中的.操作符能夠匹配所有字符,默認匹配除換行外的所有字符

1.6 re庫的另一種等價用法(編譯)

regex = re.compile(pattern, flags=0):將正則表達式的字符串形式編譯成正則表達式對象

1.7 re 庫的貪婪匹配和最小匹配

.* Re庫默認采用貪婪匹配,即輸出匹配最長的子串

*? 只要長度輸出可能不同的,都可以通過在操作符后增加?變成最小匹配

2. 實例-淘寶商品比價定向爬蟲

爬取網(wǎng)址:https://s.taobao.com/search?q=書包&js=1&stats_click=search_radio_all%25

爬取思路:

提交商品搜索請求,循環(huán)獲取頁面

對于每個頁面,提取商品名稱和價格信息

將信息輸出到屏幕上

# 導入包

import requests

import re

提交商品搜索請求,循環(huán)獲取頁面

def getHTMLText(url):

"""

請求獲取html,(字符串)

:param url: 爬取網(wǎng)址

:return: 字符串

"""

try:

# 添加頭信息,

kv = { 鄭州婦科醫(yī)院 http://m.zyfuke.com/

'cookie': 'thw=cn; v=0; t=ab66dffdedcb481f77fd563809639584

'user-agent': 'Mozilla/5.0'

}

r = requests.get(url, timeout=30, headers=kv)

# r = requests.get(url, timeout=30)

# print(r.status_code)

r.raise_for_status()

r.encoding = r.apparent_encoding

return r.text

except:

return "爬取失敗"

對于每個頁面,提取商品名稱和價格信息

def parsePage(ilt,html):

try:

plt = re.findall(r'\"view_price\"\:\"[\d\.\d]*\"',html)

tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)

for i in range(len(plt)):

price = eval(plt[i].split(':')[1])

title = eval(tlt[i].split(':')[1])

ilt.append([price,title])

except:

print('')

將信息輸出到屏幕上

def PrintGoodsList(ilt):

tplt = '{:4}\t{:8}\t{:16}'

print(tplt.format('序號','價格','商品名稱'))

count = 0

for g in ilt:

count = count + 1

print(tplt.format(count,g[0],g[1]))

def main():

goods = input('please input the goods:')

depth = 3

start_url = 'https://s.taobao.com/search?q='

infoList = []

for i in range(depth):

try:

url = start_url+goods+'&s='+str(44*i)

html = getHTMLText(url)

parsePage(infoList,html)

except:

continue

PrintGoodsList(infoList)

main()

python 關于正則表達式re

python 關于正則表達式re

分享文章:python關于正則表達式re
當前路徑:http://muchs.cn/article48/ghgjhp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化網(wǎng)站改版、做網(wǎng)站、企業(yè)網(wǎng)站制作、服務器托管小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)