強勢來襲,Python爬蟲之正則表達式!

2021-12-11 AI派

我們的《從零開始學爬蟲》專欄發布後,目前已經更新了三篇:

今天我們來介紹一個在爬蟲中非常重要的工具:正則表達式。正則表達式是一個特殊的符號系列,它能夠幫助開發人員檢查一個字符串是否與某種模式匹配。

本篇文章涉及以下內容:

正則表達:學會正則表達式的常用符號。

Python的re模塊的使用

介紹re在爬蟲中的運用

正則表達基礎 1. 行定位符

行定位符就是用來描述子串的邊界。^ 表示行的開始,$ 表示行的結尾。

例如:

^py

這個表達式表示匹配子串py的開始位置是行頭, 如:"python"就是可以匹配到的,而"Java and py"則不匹配。

但是如果使用:

py$

則是可以匹配的。

如果要匹配子串可以出現在字符串的任意部分,那麼可以直接寫成:

py

2. 元字符

我們常用的主要有以下幾種,大家先了解一下,後面的爬蟲中會慢慢講解。

代碼說明.匹配除換行符以外的任意字符\w匹配字母,數字,下劃線或漢字\W匹配字母,數字,下劃線或漢字以外的內容\s匹配單個的空白符(包括<TAB>鍵和換行符)\S匹配單個的空白符(包括<TAB>鍵和換行符)以外的所有字符\d匹配數字\b匹配單詞的開始或結束,單詞的分界符通常是空格,標點符號或者換行^匹配字符串的開始$匹配字符串的結尾

比如下面的這個表達式:

\bgo\w*\b

它用於匹配以字母go開頭的單詞。

類似:goto, google, gogo123這樣的都可以被匹配到。但是像:bo,to這樣的單詞是匹配不到的。因為不是go開頭的。

3. 限定符

常用的限定符:

限定符說明舉例?匹配前面的字符零次或一次colou?r,該表達式可以匹配color和colour+匹配前面的字符一次或多次go+gle,該表達式可以匹配的範圍從gogle到goo…gle*匹配前面的字符零次或者多次go*gle,該表達式匹配的範圍從ggle到goo…gle{n}匹配前面的字符n次go{2}gle,該表達式只匹配google{n,}匹配前面的字符最少n次go{2,}gle,該表達式匹配範圍從google到goo…gle{n,m}匹配前面的字符最少n次,最多m次employe{0, 2},該表達式匹配employ,employe和employee3種情況4. 選擇字符

我們通常使用 | 來實現選擇,比如我們的身份證號有15位和18位的,那怎麼匹配呢?

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

這個的意思式要麼是15個數字,要麼是18個數字或者17個數字加一個x(大寫,小寫)

這裡的括號表示分組。

Python Re模塊

我們可以通過下面的代碼導入re庫

import re

1. 使用match()方法進行匹配

match()方法用於從字符串的開始處進行匹配,如果在起始位置匹配成功,則返回Match對象,否則返回None,語法如下

re.match(pattern, string, [flags])

比如匹配字符串是否以"py"開頭,不區分大小寫代碼如下

import re
pattern = r'py\w+'
string = 'python is PYTHON'
match = re.match(pattern, string, re.I) 
print(match)
string = "這是python"
match = re.match(pattern, string, re.I)
print(match)

因為match是用字符串的開頭開始匹配的,因為"這是python"這個字符串不是py開始的。所以返回的是None。span這個元組表示匹配的位置,第一個為開始位置,第二個為結束位置。

import re
pattern = r'py\w+'
string = 'python is PYTHON'
match = re.match(pattern, string, re.I) 
print(match)
print("匹配的起始位置:", match.start())
print("匹配的結束位置:", match.end())
print("匹配的元組:", match.span())
print("匹配的字符:", match.string)
print("匹配的數據:", match.group())

2. 使用search()方法進行匹配

search()方法用於在整個字符串中搜索第一個匹配的值,找到就返回Match對象,否則返回None,語法如下:

re.search(pattern, string, [flags])

import re
pattern = r'py\w+'
string = 'python is PYTHON'
match = re.search(pattern, string, re.I) 
print(match)
string = "這是python"
match = re.search(pattern, string, re.I)
print(match)

從運行結果可以看出,這個方法不僅僅在字符串的起始位置搜索,其他位置有符合的匹配也可以。

3. 使用findall()方法進行匹配

findall()方法用於在整個字符串中搜索所有符合正則表達式的字符串,並以列表的形式返回。查找不到就返回空列表。

re.findall(pattern, string, [flags])

import re
pattern = r'py\w+'
string = 'python is PYTHON'
match = re.findall(pattern, string, re.I) 
print(match)
string = "這是python"
match = re.findall(pattern, string, re.I)
print(match)

4. 替換字符串

sub方法用於實現字符串替換。在爬蟲中很少會用到。等遇到後和大家分享。

5. 用split()方法分割字符串

import re
pattern = r'[?|&]'
url = 'https://search.bilibili.com/live?keyword=IT蝸殼'
result = re.split(pattern, url)
print(result)

這裡用?將url分割了兩部分

好了,今天的分享就是這些了,我們下期見。

另外,我們成立了這個爬蟲專欄的讀者交流群,如果有問題歡迎大家在群裡積極討論。還沒有加入的同學可以掃描下方的微信二維碼,添加微信好友,之後統一邀請你加入交流群。添加好友時一定要備註:爬蟲。 

相關焦點

  • python爬蟲系列(4)- 提取網頁數據(正則表達式、bs4、xpath)
    記錄提取網頁數據(正則表達式、bs4、xpath)一些常用方法和使用樣板。
  • Python之re模塊方法詳解(正則表達式)
    學習re模塊首先要對python正則表達式要了解,正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配
  • Python3爬蟲(4)--python正則表達式詳細版
    等等,在python中,這些都可以用正則表達式處理函數進行處理。re 模塊使 Python 語言擁有全部的正則表達式功能。函數語法:re.search(pattern, string, [flags])re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。所以實際應用往往使用re.search()函數。pattern:匹配的正則表達式(參考後面的正則表達式匹配模式附件)。
  • 妙用正則表達式--Python中的re模塊
    Python中的re模塊可以方便地引入正則表達式。利用正則表達式,我們可以對文本內容進行精確快捷地匹配和提取。與Stata相比,正則表達式的元字符是通用的,不同的是函數。re庫中有若干個函數各司其職,在上一篇推文《Python標準庫re:正則表達式》中我們介紹了re庫中的三個常用函數,現在小編將從實用的角度再介紹幾個常用的函數。
  • 原創通俗易懂的Python的正則表達式,建議收藏
    正則表達式正則表達式是一個特殊的字符序列,由普通字符和元字符組成。元字符能幫助你方便的檢查一個字符串是否與某種模式匹配。正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。
  • 三十一、深入Python中的正則表達式
    「@Author:Runsen」正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。正則表達式正則表達式是一個特殊的字符序列,由普通字符和元字符組成。元字符能幫助你方便的檢查一個字符串是否與某種模式匹配。Python中則提供了強大的正則表達式處理模塊,即 re 模塊, 為Python的內置模塊。
  • [Python從零到壹] 四.網絡爬蟲之入門基礎及正則表達式抓取博客案例
    ,看看Python這個有趣的世界。所有數據分析通常包括前期準備、數據爬取、數據預處理、數據分析、可視化繪圖及分析評估六個步驟,如下圖所示。其中數據爬取主要劃分為四個步驟:需求分析。首先需要分析網絡數據爬取的需求,了解所爬取主題的網址、內容分布,所獲取語料的欄位、圖集等內容。技術選擇。
  • Python網絡爬蟲之正則表達式(一)
    這就要用到一個十分強大的工具:正則表達式。1 初識正則表達式正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式並不是Python的一部分。
  • Python爬蟲之正則表達式中的元字符
    特殊符號和字符本節我們將介紹最常見的特殊符號和字符,即所謂的元字符,正是它給予正則表達式強大的功能和靈活性。下面我們將列出一些最常見的符號和字符:我們這邊只列舉了部分的符號和字符,大家可以自行搜索查看全部的內容。
  • Python爬蟲提取神器,正則表達式(re模塊),全程乾貨!
    python正則表達式(re模塊)什麼是正則表達式正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a到z之間的字母
  • Python 正則表達式
    最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 『hello』 可以匹配字符串 『hello』。要注意的是,正則表達式並不是一個程序,而是用於處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者程式語言 Perl, Python, Java 等等。
  • 給零基礎正在學Python的小白寫的正則表達式!
    許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。正則表達式通常縮寫成「regex」,單數有regexp、regex,複數有regexps、regexes、regexen。
  • Python網絡爬蟲之正則表達式(二)
    1 re模塊Python通過re模塊提供對正則表達式的支持,使用re的一般步驟是先將正則表達式的字符串形式編譯為Pattern實例,然後使用Pattern實例處理文本並獲得匹配結果(一個Match實例),最後使用Match實例獲得信息,進行其他的操作。
  • Python爬蟲之正則表達式一些常用方法
    正則表達式與Python在了解了正則表達式的相關知識之後,開始查看Python當前如何通過使用re模塊來支持正則表達式,re模塊在很早之前就引入了,用於替換那些已過時的regex模塊和regsub模塊——這兩個模塊在Python2.5版中移除,而且此後導入這兩個模塊中的任意一個都會出發
  • Python爬蟲學習必備知識點:正則表達式模塊詳解
    匹配0次或者1次匹配m次匹配m次到n次區間內的任意一次1.3、匹配位置^ 匹配開始位置$ 匹配結束位置A 匹配開始位置Z 匹配結束位置匹配單詞邊界位置(一般用於首字母大寫的匹配)B 匹配非單詞邊界問題1.4、轉義在正則表達式中有一類特殊字符需要轉移
  • Python中正則表達式模塊詳解
    用來處理字符串,對字符串進行檢索和替換,另外正則在python爬蟲的應用也是相當廣泛!
  • Python 正則表達式之 re 模塊
    我是風一,最近經常需要對字符串數據進行處理;為了便於快速處理與查詢;這裡對 Python 正則表達式進行複習,正則表達式是一個特殊的字符序列,它能幫助方便的檢查一個字符串是否與某種模式匹配;文章主要分為兩大類、常用的re模塊函數以及正則表達式的模式,那麼就開始吧!
  • R語言爬蟲系列5|正則表達式與字符串處理函數
    在R語言中,有兩種風格的正則表達式可以實現,一種就是在基本的正則表達式基礎上進行擴展,這和相應的R字符串處理函數相關,另一種就是Perl正則表達式,這種風格的正則我們在R中一般不常用,本文主要還是針對R默認的基礎的正則表達式風格進行講解。 R默認的正則表達式風格包括基礎文本處理函數和stringr包中的文本處理函數。
  • Python正則表達式總結
    正則表達式 的起源、發展、流派、語法、引擎、優化等相關知識,今天我們主要來學習一下 正則表達式在 Python語言 中的應用!可以在這裡查看Python所有的內置模塊:https://docs.python.org/3/py-modindex.html#cap-r因為re是內置模塊,所以不需要再下載,使用時直接引入即可:re模塊官方文檔:https://docs.python.org/zh-cn/3.8/library/re.htmlre模塊庫源碼:https://github.com/python/cpython/blob
  • 萬字長文詳解Python正則表達式及re模塊
    exp) 零寬度負回顧後發斷言,來斷言此位置的前面不能匹配表達式exp,Python中提供的re模塊使Python擁有全部正則表達式的功能!語法格式如下:re.match(pattern, string, flags=0)pattern是匹配的正則表達式,string是要匹配的字符串。flags是標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。