天天看點

python爬蟲之正規表達式

在學習爬蟲的過程中我們需要從網頁爬取資料,然後在過濾資料,最後儲存資料。其中過濾資料的時候我們需要提取這個網頁中的某一部分而非全部,此時我們就要通過正規表達式去過濾,下面我通過個人的學整理了一些基礎而且常見的正規表達式。

操作符 說明 執行個體
. 表示單個字元
[ ] 字元集,對單個字元給出取值範圍 [abc]表示a、b、 C,[a-z]表示a到z單個字元
* 前一個字元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_ ]

以上是一些操作符的基礎介紹,這篇文章有相關的用法介紹:​​正規表達式從入門到實戰​​

這裡列舉一部分常用的表達式:

一、校驗數字的表達式

1. 數字:^[0-9]*$

2. n位的數字:^\d{n}$

3. 至少n位的數字:^\d{n,}$

4. m-n位的數字:^\d{m,n}$

5. 零和非零開頭的數字:^(0|[1-9][0-9]*)$

6. 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7. 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$

8. 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$

9. 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$

10. 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$

11. 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12. 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13. 非負整數:^\d+$ 或 ^[1-9]\d*|0$

14. 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15. 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16. 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17. 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

18. 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

19. 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

還有很多表達式,可以參考這篇文章:​​史上最全常用正規表達式大全​​