前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python网络爬虫之正则表达式

Python网络爬虫之正则表达式

作者头像
企鹅号小编
发布2018-01-10 11:42:38
5820
发布2018-01-10 11:42:38
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

正则表达式非Python独有,在Python中通过re库模块实现。

下面是一些常见的匹配模式

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

最常规的匹配

import re

content = "Hello 1234567 World_This is a Demo"

print(content)

result = re.match("^Hello\s\d\s\w.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

泛匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

匹配目标

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello\s(\d+)\sWorld.*Demo$",content)

print(result)

print(result.group(1)) #匹配第一个括号内的结果

print(result.span()) #整个字符串全匹配

贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果只是最后的一个数字7

print(result.span()) #整个字符串全匹配

非贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果是1234567,关键在于'?'

print(result.span()) #整个字符串全匹配

匹配模式

import re

content = "Hello 1234567 World_This

is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content,re.S)

print(result)

print(result.group(1)) #匹配结果是1234567

print(result.span()) #整个字符串全匹配

转义

import re

content = "prices is $5.00"

result = re.match("prices is \$5\.00",content)

print(result) #需要使用转义符

总结:尽量用使用泛匹配,使用括号的到匹配目标,尽量使用非贪婪模式,有换行符就用re.S

re.search

re.search扫描整个字符串并返回第一个成功的匹配(不需要开头和结尾的匹配)

search(正则规则,匹配串,有换行符就加上re.S)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.search("^He.*?(\d+).*Demo$",content)

print(result.group(1)) #匹配结果是1234567

re.findall

搜索字符串,以列表形式返回所有能匹配的子串

search是查找一个,findall是查找所以的,下面来看一下具体的使用

search返回的是一个,而findall返回的是list

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

result = re.search('

.*?href="(.*?)">(.*?)',html,re.S)

print(result)

if result:

print(result.group(1), result.group(2))

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

results = re.findall('

.*?href="(.*?)">(.*?)',html,re.S)

print(results)

for result in results:

print(result)

re.sub

替换字符串中每一个匹配的的子串后返回替换后的字符串

sub(要替换的子串,替换成的子串,替换字符串)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.sub('\d+','',content)

print(result)

re.compile

将正则字符串编译成正则表达式对象(将一个正则表达式串编译成正则对象,以便于复用该匹配模式)

import re

content = "Hello 1234567 World_This is a Demo"

patten = re.compile('Hello.*Demo',re.S)

result = re.search(patten,content)

print(result)

这里要注意re.S的使用,只能在compile中复制模式,到其它方法去匹配

本文来自企鹅号 - 数据分析员媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 数据分析员媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档