python数据抓取之正则总结

python爬虫之正则总结

使用
import re
match,正则中最基本的函数,用法:
result = re.match(pattern, 需要区配的字符串)
result.group()取出被区配到的部分
演示语法的时候,基本会用match函数演示。match区配的过程是:从左到右区配,直到出现不满足规则的时候停止

语法
表示字符
. 区配任意一个字符(除\n)
[] 区配[]中列举的字符
\d 区配数字,0-9
\D 区配非数字
\s 区配空白,(包含空格和Tab键)(\t \n 空格)
\S 区配非空白
\w 区配单词字符,a-z,A-Z,0-9,_
\W 区配非单词字符

表示个数

  • 限定前一个字符出现0次或n次
  • 限定前一个字符出现1次或者n次
    ? 限定前一个字符出现0次或1次
    {m} 限定前一个字符出现m次
    {m,} 限定前一个字符至少出现m次
    {m,n} 限定前一个字符出现m到n次

表示边界
^ 表示字符串开头
$ 表示字符串结尾
\b 表示单词的边界
\B 表示非单词边界

区配分组
| “或”,表示符合左右任意一个都可以
(ab) 将括号中字符作为一个分组
\num 引用分组num区配到的字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组区配到的字符串

re的高级用法
1.search:与match不同,match是从左到右,必须挨个符合;而search表示只要被区配的字符串中有符合的就返回,但是,只返回第一次满足要求的内容。

需求:匹配出文章阅读的次数
import re
 
ret = re.search(r"\d+", "阅读次数为 9999")
ret.group()

运行结果:

'9999'

2.findall():返回被区配字符串中所有的符合要求的内容,返回列表型

需求:统计出python、c、c++相应文章阅读的次数
import re
 
ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)

运行结果:

['9999', '7890', '12345']

3.sub():将区配到的内容,按照指定的方式替换(批量处理)

需求:将匹配到的阅读次数加1

方法1:

#coding=utf-8
import re
 
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
运行结果:

python = 998
方法2:

#coding=utf-8
import re
 
def add(temp):
    strNum = temp.group()
    num = int(strNum) + 1
    return str(num)
 
ret = re.sub(r"\d+", add, "python = 997")
print(ret)
 
ret = re.sub(r"\d+", add, "python = 99")
print(ret)
运行结果:

python = 998
python = 100

贪婪与非贪婪

python中的正则,默认贪婪模式。表示在区配过程中,会尽可能多的去区配内容。如果需要关闭贪婪模式,加上一个?符号

注意项
1.这些特殊字符,需要反斜杠转义\ . ^ $ ? + * {} [] () |
2.建议字符串和正则规则都加上r,减少考虑字符串转义的麻烦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值