爬虫必备技能 熟练使用正则RE模块

正则

爬虫技术中必不可少的技能

re.search

查找返回第一个匹配结果

参数描述
pattern正则
string匹配字符串
flags控制匹配方式:区分大小写,多行匹配等

返回对象

可调描述
.span()匹配到(起始位置,结束位置)
.group(num=0)匹配到的所有结果
.group(1)括号把匹配结果分成多个组,打印指定组,如下例子

'''正则表达式中的三组括号把匹配结果分成三组'''

a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

re.match

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

re.sub

查找替换
re.sub(pattern, repl, string, count=0, flags=0)

参数描述
pattern正则中的模式字符串
repl替换的字符串,也可为一个函数
string要被查找替换的原始字符串
count模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

flags

参数描述
re.I使匹配对大小写不敏感
re.L表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode
re.X为了增加可读性,忽略空格和 # 后面的注释

re.findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

import re
 
pattern = re.compile(r'\d+')   # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
 
print(result1)
print(result2)

['123', '456']
['88', '12']

re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

import re
 
it = re.finditer(r"\d+","12a32bc43jf3") 
for match in it: 
    print (match.group() )
    
12 
32 
43 
3

匹配任意字符串

.*? 并不能匹配所有字符串,在遇到换行的时候,就匹配不到的,如果要匹配包含 /n 的字符串 请用
[\s\S]*?

匹配非 字符串开头

[^-](.....)

上面是匹配非-开头的方法

匹配html 页面

text = re.sub("<.*?[\s+]?.*?[\s+]?.*?[\s+]?.*?[\s+]?.*?>", "", text)
text = (re.sub("\s", "", text)).replace('&nbsp;', '')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值