Python爬虫技术基础之正则表达式

正则表达式

符号功能说明
\d匹配1个数字字符
\w匹配1个字母、数字或下画线字符
\s匹配1个空白字符,如换行符、制表符、普通空格等
\S匹配1个非空白字符
\n匹配1个换行符,相当于按1次Enter键
\t匹配1个制表符,相当于按1次Tab键
.匹配1个任意字符,换行符除外
*匹配0个或多个表达式
+匹配1个或多个表达式
非贪婪限定符,常与.和*配合使用
()匹配括号内的表达式,也表示一个组
[]使中括号里的内容不再有特殊含义
  • (.*?)
    用于获取文本A与文本B之间的内容,并不需要知道他的确切长度及格式,但是需要知道它在哪两个内容之间,其使用格式如下所示:
 文本A(.*?)文本B

下面结合findall()函数和非贪婪匹配(.*?)进行文本提取的演示,代码如下:

import re
res='文本A百度新闻文本B,新闻标题文本A新浪财经文本B,文本A搜狗新闻文本B新闻地址'
p_source='文本A(.*?)文本B'
source=re.findall(p_source,res)
print(source)

上述代码获得所有符合’文本A(.*?)文本B’匹配规则的内容列表,运行结果如下:

['百度新闻','新浪财经','搜狗新闻']
  • .*?
    用于代替文本C和文本D之间的所有内容。之所以要使用.*?,是因为文本C与文本D之间的内容经常变动或没有规律,无法写到匹配规则里;或者文本C与文本D之间的内容较多,不想写到匹配规则里。使用格式如下:
   文本C.*?文本D

演示代码如下:

import re
res='<h3>文本C<变化的网址>文本D,新闻标题</h3>'
p_source='<h3>文本C.*?文本D(.*?)</h3>'
source=re.findall(p_source,res)
print(source)

运行结果如下:

['新闻标题']
  • 自动考虑换行的修饰符re.S
    使用格式如下:
   re.findall(匹配规则,原始文本,re.S)

演示代码如下:

import re
res='''文本A
    百度新闻文本B'''
p_source='文本A(.*?)文本B'
source=re.findall(p_source,res,re.S)
print(source) #由于文本A和文本B之间有换行,如果在findall后的括号中不写re.S,则获取不到内容,因为(.*?)匹配不了换行   

运行结果:

   ['百度新闻']
  • 知识点补充
    其格式如下:re.sub(需要替换的内容,替换值,原字符串)。
    演示代码如下:
title=['<em>你好</em>']
title[0]=re.sub('<em>','',title[0])
print(title[0])

运行结果:

你好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值