一、為什么必須要有正則表達式
正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
在我們使用xpath和css選擇器時只能取到html標簽下的一段字符串,比如我們要取知乎回答下的時間,有的是“發(fā)布于 13:57”,有的是“發(fā)布于 昨天 13:50”,還有的是“發(fā)布于 2016-03-17”。如果我們不用正則表達式,而用其他替代方案,比如多個if else,或者replace,處理起來是非常繁瑣的。
本文章將介紹幾種非常常用的特殊字符,學會了使用這些字符將會解決98%爬蟲需要做字符串提取的工作。
二、正則表達式最常見的字符
1)特殊字符:就是一些有特殊含義的字符。 $ () * + . [ ? \ ^ { |
2)限定符:用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才能滿足匹配。* + ? {n} {n,} {n,m}
3)定位符:用來描述字符串或單詞的邊界。^ $
4)其他字符:\w \W \s \S \d
我先不介紹這些字符有什么含義,我們直接進入python示例
三、正則表達式的簡單應(yīng)用及python示例
3.1、介紹^ . * $的用法
1)^ 匹配輸入字符串開始的位置。
2). 匹配除換行符 \n 之外的任何單字符。
3)* 匹配前面的子表達式零次或多次。
4)$ 匹配輸入字符串的結(jié)尾位置。

3.2、介紹() ?用法
1)()標記一個子表達式的開始和結(jié)束位置。
2)?匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。

3.3、介紹+ {n} {n,} {n,m}用法
1)+匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。
2){n} n 是一個非負整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
3){n,} n 是一個非負整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
4){n,m} m 和 n 均為非負整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數(shù)之間不能有空格。

3.4、介紹|[123] [0-9] [^1]用法
1)|指明兩項之間的一個選擇。
2)[123] 只要是123中的其中一個即可。
3)[0-9] 只要是0-9中的任意數(shù)字即可。
4)[^1] 非,只要不是1即可。

3.5、介紹\s \S \w \W \d用法
1)\s匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
2)\S匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
3)\w 等價于[A-Za-z0-9_]。
4)\W 與\w相反。
5)\d 所有數(shù)字,等價于[0-9]。
