爬虫——re库的使用

爬虫——re库的使用

1. re库的介绍

  • 在python中,re库是一个用于处理正则表达式的库,主要用来处理字符串进行正则表达式的匹配和替换

  • re库是python的标准库,不需要安装

  • 导入re库

    import re
    

2. 正则表达式

2.1 基本语法

正则表达式由普通字符和特殊字符(元字符)组成,用于描述和匹配符合特定规则的字符串

2.2 元字符

  • .

    匹配除了换行符以外的任意一个字符

    正则表达式 a.b 可以匹配"aab",“abb”,"acb"等

  • ^

    匹配字符串的开头位置

    正则表达式 ^bt 可以匹配"btds",“btsd"等,不能匹配"dsbt”

  • $

    匹配字符串的结束位置

    正则表达式 bt$ 可以匹配"dsbt",“sdbt"等,不能匹配"btds”

    匹配前面的字符或者组合零个或多个

    正则表达式 a*b 可以匹配"b",“ab”,"aab"等

    匹配前面的字符或者组合一个或多个

    正则表达式 a*b 可以匹配"ab",“aab”,“aaab"等,不能匹配"b”

  • ?

    匹配前面的字符或者组合零个或一个

    正则表达式 a?b 只能匹配"b",“ab”

  • []

    匹配括号内的任意一个字符

    正则表达式 [ab] 只能匹配"a",“b”

  • [^]

    匹配不在括号内的任意一个字符

    正则表达式 [ab] 可以匹配"c",“d”,“e"等,不可以匹配"a”,“b”

  • ()

    将括号内的内容作为一个组合

    正则表达式 (ab)* 可以匹配"",“ad”,"abab"等

2.3 量词

正则表达式量词有:*,+,?,{n},{n,},{n,m}

  • *,+,?在前文查看

  • {n}

    匹配前面的字符或者组合n次

  • {n,}

    匹配前面的字符或者组合至少n次

  • {n,m}

    匹配前面的字符或者组合至少n次,至多m次

2.4 转义字符

  • \b

    表示单词边界,即一个单词的开头和结尾

  • \B

    表示非单词边界

  • \d

    匹配数字,等价于[0-9]

  • \D

    匹配非数字,等价于[^0-9]

  • \s

    匹配空白字符

  • \S

    匹配非空白字符

  • \w

    匹配非特殊字符,即字母,数字,下划线,汉字

  • \W

    匹配特殊字符

  • \n

    匹配换行符

  • \r

    匹配回车符

  • \t

    匹配制表符

  • \v

    匹配垂直制表符

  • \f

    匹配换页符

3. re库的常用方法

3.1 match()

match方法用于从字符串的开始处进行匹配,匹配成功返回Match对象,否则None

语法格式:

re.match(pattern,string[,flags])

参数:

  1. pattern:表示模式字符串,即正则表达式
  2. string:需要匹配的字符串
  3. flags:表示标志位
标志描述
re.A 或 re.ASCII对于 \w、\W、\b、\B、\d、\D、\s 和 \S 只进行 ASCII 匹配
re.I 或re.IGNORECASE执行不区分字母大小写的匹配
re.M 或 re.MULTILINE将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处)
re.S 或 re.DOTALL使用(.)字符匹配所有字符,包括换行符
re.X 或 re.VERBOSE忽略模式字符串中未转义的空格和注释
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""

res = re.match(r'<a href="#" class="html">.*</a>',str)
print(res.group())
#结果为:<a href="#" class="html">首页</a>

res = re.match(r'<a href="#" class="html">人文</a>',str)
print(res)
#结果为:None

3.2 search()

search方法用于从字符串中搜索第一个匹配的值,匹配成功返回Match对象,否则None

语法格式:

re.search(pattern,string[,flags])

参数:

  1. pattern:表示模式字符串,即正则表达式
  2. string:需要匹配的字符串
  3. flags:表示标志位
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""
res = re.search(r'<a href="#" class="html">人文</a>',str)
print(res.group())
#结果为:<a href="#" class="html">人文</a>

3.3 findall()

findall方法用于从字符串中搜索所有匹配上的值,匹配成功返回列表,否则空列表

语法格式:

re.findall(pattern,string[,flags])

参数:

  1. pattern:表示模式字符串,即正则表达式
  2. string:需要匹配的字符串
  3. flags:表示标志位
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""
res = re.findall(r'<a href="#" class="html">.*</a>',str)
for i in res:
    print(i,end="    ")
# 结果为:<a href="#" class="html">首页</a>    <a href="#" class="html">人文</a>

3.4 sub()

sub方法用于将匹配上的字符串替换成指定的字符串,返回替换后的字符串

语法格式:

re.sub(pattern,repl,string[,count][,flags])

参数:

  1. pattern:表示模式字符串,即正则表达式
  2. repl:表示要替换的字符串
  3. string:需要匹配的字符串
  4. count:表示替换的最大次数,不选的话替换所有的匹配
  5. flags:表示标志位
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""
res = re.sub(r'#',"http",str,count=1)
print(res)
# 结果为:<a href="http" class="html">首页</a>
#        <a href="#" class="html">人文</a>

3.5 split()

spllit方法用于根据正则表达式分割字符串,返回列表

语法格式:

re.split(pattern,string[,maxsplit][,flags])

参数:

  1. pattern:表示模式字符串,即正则表达式
  2. string:需要匹配的字符串
  3. maxsplit:表示最大分割数
  4. flags:表示标志位
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""
res = re.split(r'\n',str)
print(res)
# 结果为:['<a href="#" class="html">首页</a>', '<a href="#" class="html">人文</a>']

3.6 compile()

用于将正则表达式编译成可复用的正则对象,返回一个regex_object对象

当需要多次使用同一个正则表达式时,可以使用compile方法

regex = re.compile(pattern)

re.match(pattern,string[,flags])
#等价于:regex.match(string[,flags])

re.search(pattern,string[,flags])
#等价于:regex.search(string[,flags])

re.findall(pattern,string[,flags])
#等价于:regex.findall(string[,flags])

re.sub(pattern,repl,string[,count][,flags])
#等价于:regex.sub(repl,string[,count][,flags])

re.split(pattern,string[,maxsplit][,flags])
#等价于:regex.split(string[,maxsplit][,flags])

4. Match对象

Match对象包含了匹配值的位置和数据

方法描述
start()返回匹配值的起始位置
end()返回匹配值的结束位置
span()返回一个元组,(起始位置,结束位置)
group()返回匹配得到的结果
str = """<a href="#" class="html">首页</a>
<a href="#" class="html">人文</a>"""
res = re.match(r'<a href="#" class="html">首页</a>',str)
print(res.start())
print(res.end())
print(res.span())
print(res.group())
"""
结果为:
0
31
(0, 31)
<a href="#" class="html">首页</a>
"""
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值