Python爬蟲速成------正則表達式及re庫

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。

正則表達式

常用操作符

操作符 說明 實例
. . 表示任何單個字符
[] 字符集,對單個字符給出取值範圍` 表示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 數字,等價於[0‐9]
\w 單詞字符,等價於[A‐Za‐z0‐9_]

經典正則表達式實例

經典正則表達式實例

IP地址的精確寫法

0‐99: [1‐9]?\d

100‐199: 1\d{2}

200‐249: 2[0‐4]\d

250‐255: 25[0‐5]

(([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])

Re庫

re庫採用raw string類型表示正則表達式,表示爲:r’text’

建議:當正則表達式包含轉義符時,使用raw string

函數 說明
re.search() 在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
re.match() 從一個字符串的開始位置起匹配正則表達式,返回match對象
re.findall() 搜索字符串,以列表類型返回全部能匹配的子串
re.split() 將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
re.finditer() 搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
re.sub() 在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串

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

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

re.match(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 : 待匹配字符串
  • maxsplit: 最大分割數,剩餘部分作爲最後一個元素輸出
  • flags : 正則表達式使用時的控制標記

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

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

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

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

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

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

Re庫的另一種等價用法

函數 說明
regex.search() 在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
regex.match() 從一個字符串的開始位置起匹配正則表達式,返回match對象
regex.findall() 搜索字符串,以列表類型返回全部能匹配的子串
regex.split() 將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
regex.finditer() 搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
regex.sub() 在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串

Re庫的Match對象

Match對象是一次匹配的結果,包含匹配的很多信息

In[43]: match=re.match(r'[A-Z]+', 'Start HBU河北大學簡稱HBU')
In[44]: type(match)
Out[44]: re.Match

Match對象的屬性

屬性 說明
.string 待匹配的文本
.re 匹配時使用的patter對象(正則表達式)
.pos 正則表達式搜索文本的開始位置
.endpos 正則表達式搜索文本的結束位置

Match對象的方法

方法 說明
.group(0) 獲得匹配後的字符串
.start() 匹配字符串在原始字符串的開始位置
.end() 匹配字符串在原始字符串的結束位置
.span() 返回(.start(), .end())

最小匹配操作符

操作符 說明
*? 前一個字符0次或無限次擴展,最小匹配
+? 前一個字符1次或無限次擴展,最小匹配
?? 前一個字符0次或1次擴展,最小匹配
{m,n}? 擴展前一個字符m至n次(含n),最小匹配

regex

推薦課程《Python網絡爬蟲與信息提取 》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章