二、文本提取——正則表達式


我們寫一個爬蟲, 主要還是要提取網頁中的文本信息, 而正則表達式可以很容易的完成這一任務, 這節, 我們來學習一些基本的正則表達式用法, 在以后的章節中, 會在適當的時候插入一些高級用法。

在python中, 使用正則表達式需要引入re包

1. 匹配普通字符.

  任何數字, 字母, 標點符號等, 都可以直接匹配到

 1 import re
 2 
 3 # 匹配數字構成的字串123
 4 string = '012345'
 5 p = re.search('123', string)
 6 print(p.group(0))
 7 
 8 # 匹配字母構成的字串abc
 9 string = '012abc345'
10 p = re.search('abc', string)
11 print(p.group(0))
12 
13 # 匹配標點符號構成的字串,"}
14 string = '01234,"}5'
15 p = re.search(',"}', string)
16 print(p.group(0))

2. 特殊字符.

  正則表達式中定義了一些有着特殊含義的字符, 這些字符只有使用 \ 轉義以后才能按照字面意思理解

字符 含義 舉例說明
^ 匹配字符串的開頭 比如 ^abc 可以匹配 abcd, 但是卻不能匹配 0abc
$ 匹配字符串的結尾 比如 abc$ 可以匹配123abc, 卻不能匹配 123abcd
* 前一字符匹配零次或者多次 比如 ba* 可以匹配 b 或者 ba, 或者baaaaaaa
+ 前一字符匹配一次或者多次 比如 ba+ 可以匹配 ba 或者 baaaa ,但是不能匹配 b
? 前一字符匹配零次或者一次 比如 ba? 可以匹配 b 或者 ba 但不能匹配 baa
() 表示一個子表達式, 稱為元組, 使用元組可以提取出子串 比如 abc(123)def , 當用來我們匹配字符串000abc123defgh時, 我們可以匹配到兩個字符串, 分別是 abc123def 和 123
[] 放在[]之間的字符是或的關系,表示匹配到其中一個即可, 需要注意的是^在其中表示匹配非其中的字符的字符, 比如[^345]表示匹配不是3且不是4且不是5的字符

[abc]可以匹配字符a 也可以匹配字符 b, 還可以匹配字符 c

[^abc]可以匹配除a, b, c以外的所有字符

[0-9]可以匹配數字0,1,2,3,4,5,6,7,8,9

[a-z]可以匹配26個小寫字母

[A-Z]可以匹配26個大寫字母

| 表示或的關系 ab|12可以匹配到 字符串 ef12cdab34中的ab 和 12
{} 可以用於指定前一字符的匹配次數

a{3}可以匹配 字符串abaaacd中的aaa, 但不能匹配aa, a{1,3} 可以匹配 a, aa, aaa,

a{2,}表示至少匹配兩個a, 

a{1, }表示至少匹配1個a, 等價於a+

a{0,}表示至少匹配0次a, 等價於a*

. 可以匹配除換行符\n之外的所有字符 比如 a.d可以匹配 a_d, abd, a0d等

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

這里對*, + , ?需要特別說明:

*和+默認采用貪婪模式, 即會盡可能多的匹配, 比如a* 會優先匹配abcaaadef中的 aaa, 而如果配合?使用, 就可以采用非貪婪模式, 比如a*? 會優先匹配abcaaadef 中的a

3.轉義符

字符 含義 舉例說明
\d 匹配任意數字 例如\d{3}可以匹配123, 456, 011等由任意三個數字構成的字符串
\D 匹配任意非數字字符 例如\D{2}可以匹配a_, ab, _#, aa等由任意兩個非數字字符構成的字符串, 但不能匹配諸如a0, 00, _0的字符串

未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM