爬虫之正则表达式入门文章版

1. 正则表达式

1.1 元组

.	匹配换行符以外的任意字符(实际上没有什么用处)
\w	匹配字母、数字和下划线
\s	空白符
\d	数字
\n	换行符
\t	制表符

^	字符串的开始
$	字符串的结尾

\W	不匹配字母、数字和下划线  
\D
\S

a|b		匹配a或b
()		匹配括号内的表达式,也表示一个组
[...]	匹配字符组中的字符	[a-zA-Z0-9]这种写法也可以
[^...]	不匹配字符组中的字符

1.2 量词

*		重复0次或多次	\d*
+		最少一次或以上
?		0次或一次
{n}		重复n次	\d{10}
{n,}	重复n次以上
{n,m}	重复n到m次

1.3 贪婪匹配与惰性匹配

.*		贪婪匹配	尽可能多的匹配内容	玩儿.*游戏
.*?		惰性匹配	尽可能少的匹配内容(使用的是回溯算法,用的多)	玩儿.*?游戏

1.4 re模块

1.4.1 findall

import re
a='我的家在666路口,电话是1008611,养了3条狗'
result=re.findall(r'\d+',a)#在python中\往往是转义字符使用,在前面加r可以去除转义效果
print(result)	#得到的是一个数组

1.4.2 finditer (重点,常用)

import re
a='我的家在666路口,电话是1008611,养了3条狗'
result=re.finditer(r'\d+',a)#得到的也是迭代器结果
for item in result:
    print(result)#得到的是一个对象
print(result.group())#得到的是值

1.4.3 search

import re
a='我的家在666路口,电话是1008611,养了3条狗'
result=re.search(r'\d+',a)#只会匹配到第一次的内容
print(result.group())

1.4.4 match

import re
a='我的家在666路口,电话是1008611,养了3条狗'
result=re.match(r'\d+',a)  #区别match和search一样只会查找第一个符合条件的结果,等效于result=re.search(r'^\d+',a)
print(result)#打印结果为None

1.4.5 预加载 compile

import re
obj=re.compile(r'\d+')#预加载可以减少内存的使用和提高运行速度

a='我的家在666路口,电话是1008611,养了3条狗'
#result=re.match(r'\d+',a)
result=obj.match(a)#使用已经加载好的正则表达式

1.4.6 爬虫正则规范

s='''
<title>百度一下</title>1111<title>百度一下</title>2222<title>百度一下</title>3333
'''
obj=re.compile(r"<title>(.*?)<title>")#得到的数据为小括号里面的'.*?'的值,即'百度一下'
obj1=re.compile(r'<title>(?P<MD>.*?)</title>(?P<value>\d+$)')#得到的结果为'百度一下'和数字,并将'百度一下'MD组,将数字放在value组
result=obj1.finditer(s)
for item in result:
    MD=item.group('MD')#MD的值为'百度一下'
    print(MD)
    
    Value=item.group('value')#value的值为数字
    print(Value)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值