溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python 關(guān)于正則表達(dá)式re

發(fā)布時(shí)間:2020-08-10 22:14:22 來源:ITPUB博客 閱讀:140 作者:ckxllf 欄目:編程語言

  1.正則表達(dá)式 re

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

  通過使用正則表達(dá)式,可以:

  - 測(cè)試字符串內(nèi)的模式。

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

  - 替換文本。

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

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

  可以查找文檔內(nèi)或輸入域內(nèi)特定的文本。

  可以使用正則表達(dá)式來搜索和替換標(biāo)記。

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

  正則表達(dá)式是用來簡(jiǎn)潔表達(dá)一組字符串的表達(dá)式

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

  正則表達(dá)式是一種針對(duì)字符串表達(dá)“簡(jiǎn)潔”和“特征”思想的工具

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

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

  同時(shí)查找或替換一組字符串

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

  1.1 正則表達(dá)式語法

  正則表達(dá)式語法由字符和操作符構(gòu)成:

  常用操作符

  . 表示任何單個(gè)字符

  [ ] 字符集,對(duì)單個(gè)字符給出取值范圍 ,如[abc]表示a、b、c,[a‐z]表示a到z單個(gè)字符

  [^ ] 非字符集,對(duì)單個(gè)字符給出排除范圍 ,如[^abc]表示非a或b或c的單個(gè)字符

  * 前一個(gè)字符0次或無限次擴(kuò)展,如abc* 表示 ab、abc、abcc、abccc等

  + 前一個(gè)字符1次或無限次擴(kuò)展 ,如abc+ 表示 abc、abcc、abccc等

  ? 前一個(gè)字符0次或1次擴(kuò)展 ,如abc? 表示 ab、abc

  | 左右表達(dá)式任意一個(gè) ,如abc|def 表示 abc、def

  {m} 擴(kuò)展前一個(gè)字符m次 ,如ab{2}c表示abbc

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

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

  $ 匹配字符串結(jié)尾 ,如abc$表示abc且在一個(gè)字符串的結(jié)尾

  ( ) 分組標(biāo)記,內(nèi)部只能使用 | 操作符 ,如(abc)表示abc,(abc|def)表示abc、def

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

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

  1.3 正則表達(dá)式re庫的使用

  調(diào)用方式:import re

  re庫采用raw string類型表示正則表達(dá)式,表示為:r’text’,raw string是不包含對(duì)轉(zhuǎn)義符再次轉(zhuǎn)義的字符串;

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

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

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

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

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

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

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

  re.split() 將一個(gè)字符串按照正則表達(dá)式匹配結(jié)果進(jìn)行分割,返回列表類型

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

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

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

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

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

  flags : 正則表達(dá)式使用時(shí)的控制標(biāo)記:

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

  re.M --> re.MULTILINE : 正則表達(dá)式中的^操作符能夠?qū)⒔o定字符串的每行當(dāng)作匹配開始

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

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

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

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

  .* Re庫默認(rèn)采用貪婪匹配,即輸出匹配最長(zhǎng)的子串

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

  2. 實(shí)例-淘寶商品比價(jià)定向爬蟲

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

  爬取思路:

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

  對(duì)于每個(gè)頁面,提取商品名稱和價(jià)格信息

  將信息輸出到屏幕上

  # 導(dǎo)入包

  import requests

  import re

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

  def getHTMLText(url):

  """

  請(qǐng)求獲取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 "爬取失敗"

  對(duì)于每個(gè)頁面,提取商品名稱和價(jià)格信息

  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('序號(hào)','價(jià)格','商品名稱'))

  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 關(guān)于正則表達(dá)式re

  

python 關(guān)于正則表達(dá)式re
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI