爬虫之正则解析

一、什么是正则

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

二、爬虫上什么场景下用正则

这个很难说,对于初学者或者一般的结构比较“规范”(也就是人家没想搞你)的网页数据,直接用XPath或者bs4就可以解析网页数据了,但是有时候爬虫你会发现数据不是在HTML中,也不是在json包中,而是在返回的js里。这个时候XPath或者bs4不能解决了,就只有采用正则了。当然,后期正则使用比较熟练的情况下,能正则就正则。因为正则入门的门槛相对于XPath或者bs4要高一点,但是都掌握的情况下,正则显然解析数据更快速。

三、正则实例介绍(匹配字符串中的邮箱)

import re
#待匹配的字符串
str_test = "唐丁的邮箱是donding@163.com,It's good"

#构造匹配的正则表达式
reg = r'[a-zA-Z0-9]+@163.com'
re.search(reg,str_test).group()
>>output:'donding@163.com'

这个不是适用所有字符串的邮箱匹配的,如果字符串全是英文肯定就不行了,匹配的正则表达式需要根据实际的字符串来灵活变化。

四、正则常用知识点

1、正则表达式中,如果直接给出字符,就是精确匹配。

例如: reg = “唐丁” ,可以匹配出字符串中含有的“唐丁”;

2、用\d可以匹配一个数字,\w可以匹配一个字母或数字

例如:‘00\d’可以匹配‘007’,但无法匹配‘00A’;

​ ‘\d\d\d’可以匹配‘010’;

​ ‘\w\w\d’可以匹配‘py3’;

3、.可以匹配任意字符

例如:'py.'可以匹配'pyc''pyo''py!'等等

4、*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符

例如:\d{3}表示匹配3个数字,例如'010'

\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' '

\d{3,8}表示3-8个数字,例如'1234567'

5、[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线
6、[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串
7、[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串
8、[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)
9、D|d可以匹配D或d,所以(P|p)ython可以匹配'Python'或者'python'
10、^表示行的开头,^\d表示必须以数字开头
11、$表示行的结束,\d$表示必须以数字结束
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员唐丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值