天天看点

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)$

还有很多表达式,可以参考这篇文章:​​史上最全常用正则表达式大全​​