python爬蟲(三)

1、正則表達式正則表達式

1.正則表達式的概念框架

  • 正則表達式是用來簡潔表達一組字符串的表達式
  • 正則表達式是一種通用的字符串表達框架
  • 正則表達式是一種爭對字符串表達「簡潔」和「特徵」思想的工具

2.正則表達式的應用ide

  • 表達文本類型的特徵
  • 同時查找和替換一組字符串
  • 匹配字符串的所有或部分(最主要應用在字符串匹配中)

3.正則表達式的使用函數

正則表達式的語法由字符和操做符構成工具

正則表達式的經常使用操做符:編碼

#P(Y|YT|YTH|YTHO)?N   ===》 'PN'、'PYN'、'PYTN'、'PYTHN'、'PYTHON'

#PYTHON+   ===》 'PYTHON'、'PYTHONN'、'PYTHONNN'… 

#PY[TH]ON  ===》 'PYTON'、'PYHON' 

#PY[^TH]?ON  ===》 'PYON'、'PYaON'、'PYbON'、'PYcON'… 

#PY{:3}N  ===》 'PN'、'PYN'、'PYYN'、'PYYYN'…
正則表達式語法實例
# ^[A-Za-z]+$                由26個字母組成的字符串
# ^[A-Za-z0-9]+$             由26個字母和數字組成的字符串
# ^-?\d+$                    整數形式的字符串
# [0-9]*[1-9][0-9]*$         正整數形式的字符串
# [1-9]\d{5}                 中國境內郵政編碼,6位
# [\u4e00-\u9fa5]            匹配中文字符
# \d{3}-\d{8}|\d{4}-\d{7}    國內電話號碼

#匹配IP地址的正則表達式:
#把255分紅四段標識
#(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
經典正則表達式實例

2、re庫的使用spa

1.正則表達式的表示類型code

  • rwa string類型(原生字符串類型),raw string是不包含對轉義符再次轉義的字符串。例如:r'[1-9]\d{5}'
  • string類型。string是包含對轉義符再次轉義的字符串。例如:'[1-9]\\d{5}'

2.re庫的主要功能函數對象

re.match(pattern,string,flags=0),在一個字符串的開始位置起匹配正則表達式,返回match對象。blog

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記

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

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記

re.findall(pattern,string,flags=0),搜索字符串,以列表類型返回所有能匹配的字串

 

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記

 

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

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記
  • maxsplit:最大分割數,剩餘部分做爲最後一個元素輸出

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

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記

re.sub(pattern,repl,string,count=0,flags=0),在一個字符串中替換全部匹配正則表達式的字串,返回替換後的字符串

  • pattern:正則表達式的字符串或原生字符串表示
  • repl:替換匹配字符串的字符串
  • string:待匹配字符串
  • count:匹配的最大替換次數
  • flags:正則表達式使用時的控制標記

總結:

3.re庫的另外一種等價用法

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

  • pattern:正則表達式的字符串或原生字符串表示
  • flags:正則表達式使用時的控制標記

4.match對象介紹

match對象的屬性:

  • .string:待匹配的文本
  • .re匹配時使用的pattern對象
  • .pos:正則表達式搜索文本的開始位置
  • .endpos:正則表達式搜索文本的結束位置

match對象的方法:

  • .group(0):獲取匹配後的字符串
  • .start():匹配字符串在原始字符串的開始位置
  • .end():匹配字符串在原始字符串的結束位置
  • .span():返回(.start(),.end())

5.re庫的貪婪匹配和最小匹配

re庫默認採用貪婪匹配,即輸出匹配最長的字串

import re
string="PYONOOOOOOON"
match=re.search(r'PY.*N',string)
print(match.group(0))   #PYONOOOOOOON

最小匹配:

import re
string="PYONOOOOOOON"
match=re.search(r'PY.*?N',string)
print(match.group(0))   #PYON

最小匹配操做符:

  • *?:   前一個字符0次或無限次擴展,最小匹配
  • +?:  前一個字符1次或無限次擴展,最小匹配
  • ??:   前一個字符0次或1次擴展,最小匹配
  • {m,n}?: 擴展前一個字符m至n次,最小匹配
相關文章
相關標籤/搜索