日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 网络爬虫笔记6 -- 正则表达式

發布時間:2025/3/12 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 网络爬虫笔记6 -- 正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 網絡爬蟲筆記6 – 正則表達式

Python 網絡爬蟲系列筆記是筆者在學習嵩天老師的《Python網絡爬蟲與信息提取》課程及筆者實踐網絡爬蟲的筆記。

課程鏈接:Python網絡爬蟲與信息提取
參考文檔:
Requests 官方文檔(英文)
Requests 官方文檔(中文)
Beautiful Soup 官方文檔
re 官方文檔
Scrapy 官方文檔(英文)
Scrapy 官方文檔(中文)


一、正則表達式


1、介紹

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


2、基礎語法

操作符說明實例
.表示任何單個字符
[ ]字符集,對單個字符給出取值范圍[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數字,等價于[0‐9]
\D匹配一個非數字字符,等價于[ ^0-9]
\w單詞字符,等價于[A‐Za‐z0‐9_]
\W匹配任何非單詞字符,等價于“[ ^A-Za-z0-9_]”。
\f匹配一個換頁符,等價于\x0c和\cL。
\n匹配一個換行符,等價于\x0a和\cJ。
\r匹配一個回車符,等價于\x0d和\cM。
\s匹配任何不可見字符,包括空格、制表符、換頁符等等。等價于[ \f\n\r\t\v]。
\S匹配任何可見字符,等價于[^ \f\n\r\t\v]。
\t匹配一個制表符,等價于\x09和\cI。
\v匹配一個垂直制表符,等價于\x0b和\cK。

貪婪匹配與最小匹配: 默認為貪婪匹配,加上?就可以實現最小匹配。

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

3、經典正則化表達式實例

# 由26個字母組成的字符串 ^[A‐Za‐z]+$# 由26個字母和數字組成的字符串 ^[A‐Za‐z0‐9]+$# 整數形式的字符串 ^‐?\d+$# 正整數形式的字符串 ^[0‐9]*[1‐9][0‐9]*$# 中國境內郵政編碼,6位 [1‐9]\d{5}# 匹配中文字符 [\u4e00‐\u9fa5]# 國內電話號碼,010‐68913536 \d{3}‐\d{8}|\d{4}‐\d{7}# 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 庫


1、基礎

導入:

# python自帶re庫,不需要安裝 import re

raw string 類型:

  • raw string類型:原生字符串類型,不需要轉義字符來表示特殊字符
  • re庫采用raw string類型表示正則表達式
# 通用格式,在字符串前加 r r'regex'# 示例,不會對\進行轉義 r'[1‐9]\d{5}' r'\d{3}‐\d{8}|\d{4}‐\d{7}'

2、re 庫函數

函數表: 函數在內部會對正則表達式進行編譯再匹配

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

參數

  • pattern:正則表達式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正則表達式使用時的控制標記
    • re.I re.IGNORECASE:忽略正則表達式的大小寫,[A‐Z]能夠匹配小寫字符
    • re.M re.MULTILINE:正則表達式中的^操作符能夠將給定字符串的每行當作匹配開始
    • re.S re.DOTALL:正則表達式中的.操作符能夠匹配所有字符,默認匹配除換行外的所有字符
  • maxsplit:最大分割數,剩余部分作為最后一個元素輸出
  • repl:替換匹配字符串的字符串
  • count:匹配的最大替換次數

返回: Match對象

屬性說明
.string待匹配的文本
.re匹配時使用的patter對象(正則表達式)
.pos正則表達式搜索文本的開始位置
.endpos正則表達式搜索文本的結束位置
.group(0)獲得匹配后的字符串
.start()匹配字符串在原始字符串的開始位置
.end()匹配字符串在原始字符串的結束位置
.span()返回(.start(), .end())

示例:

import redef re_func():"""re 庫函數使用"""string = 'HIT123456 SZ666666'# search函數match1 = re.search(r'[1-9]\d{5}', string)if match1:# Match對象的屬性和方法print('-'*20)print(match1.group(0))print(match1.string)print(match1.re)print(match1.pos)print(match1.endpos)print(match1.start())print(match1.end())print(match1.span())print('-'*20)# match 函數match2 = re.match(r'[1-9]\d{5}', string)if match2:print(match2.group(0))# findall函數ls1 = re.findall(r'[1-9]\d{5}', string)print(ls1)# split函數ls2 = re.split(r'[1-9]\d{5}', string, maxsplit=1)print(ls2)# finditer函數for m in re.finditer(r'[1-9]\d{5}', string):if m:print(m.group(0))# sub函數res = re.sub(r'[1-9]\d{5}', 'number', string)print(res)if __name__ == '__main__':print('running regex')re_func()

3、re.compile()

  • 顯式編譯正則表達式,再匹配
  • 可以使用re庫中的6種匹配函數
# 使用格式 正則表達式編譯后的對象.函數名()# 示例 pat = re.compile(r'[1-9]\d{5}') print(pat.search(string).group(0))

總結

以上是生活随笔為你收集整理的Python 网络爬虫笔记6 -- 正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。