python網路爬蟲與資訊提取——6.Re(Regex)庫入門

來源:互聯網
上載者:User

標籤:pytho   等價   精確   標準庫   mat   art   預設   表示   blog   

1.Regex常用操作符

.         表示任何單個字元
[ ]    字元集,對單個字元給出取值範圍        [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]
\w   單詞字元,等價於[A‐Za‐z0‐9_]

2.經典Regex執行個體

^[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}            國內電話號碼,010‐68913536 

IP地址字串形式的Regex(IP地址分4段,每段0‐255)

\d+.\d+.\d+.\d+ 或 \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}

精確寫法 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])

3.Re庫是Python的標準庫,主要用於字串匹配

調用方式:import re

類型:

raw string類型(原生字串類型)表示Regex,raw string是不包含對轉義符再次轉義的字串,表示為:r‘text‘

string類型表示Regex,支援轉義符

主要功能函數:

(1)re.search(pattern, string, flags=0)在一個字串中搜尋匹配Regex的第一個位置,返回match對象
? pattern : Regex的字串或原生字串表示
? string : 待匹配字串
? flags  : Regex使用時的控制標記

re.I re.IGNORECASE 忽略Regex的大小寫,[A‐Z]能夠匹配小寫字元
re.M re.MULTILINE Regex中的^操作符能夠將給定字串的每行當作匹配開始
re.S re.DOTALL Regex中的.操作符能夠匹配所有字元,預設匹配除換行外的所有字元
 (2)re.match(pattern, string, flags=0)從一個字串的開始位置起匹配Regex,返回match對象
 (3)re.findall(pattern, string, flags=0) 搜尋字串,以清單類型返回全部能匹配的子串
 (5)re.split(pattern, string, maxsplit=0, flags=0) 將一個字串按照Regex匹配結果進行分割,返回清單類型

 maxsplit: 最大分割數,剩餘部分作為最後一個元素輸出
 (6)re.finditer(pattern, string, flags=0) 搜尋字串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
 (7)re.sub(pattern, repl, string, count=0, flags=0) 在一個字串中替換所有匹配Regex的子串,返回替換後的字串

repl : 替換匹配字串的字串
count  : 匹配的最大替換次數

4.物件導向用法:編譯後的多次操作

regex = re.compile(pattern, flags=0)將Regex的字串形式編譯成Regex對象
? pattern : Regex的字串或原生字串表示
? flags  : Regex使用時的控制標記

regex.search() 在一個字串中搜尋匹配Regex的第一個位置,返回match對象
regex.match() 從一個字串的開始位置起匹配Regex,返回match對象
regex.findall() 搜尋字串,以清單類型返回全部能匹配的子串
regex.split() 將一個字串按照Regex匹配結果進行分割,返回清單類型
regex.finditer() 搜尋字串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
regex.sub() 在一個字串中替換所有匹配Regex的子串,返回替換後的字串

5.Match對象是一次匹配的結果,包含匹配的很多資訊

屬性:.string 待匹配的文本
.re 匹配時使用的patter對象(Regex)
.pos Regex搜尋文本的開始位置
.endpos Regex搜尋文本的結束位置

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

6.貪婪匹配和最小匹配

同時匹配長短不同的多項,Re庫預設採用貪婪匹配,即輸出匹配最長的子串

最小匹配:

*? 前一個字元0次或無限次擴充,最小匹配
+? 前一個字元1次或無限次擴充,最小匹配
?? 前一個字元0次或1次擴充,最小匹配
{m,n}? 擴充前一個字元m至n次(含n),最小匹配

python網路爬蟲與資訊提取——6.Re(Regex)庫入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.