正则匹配之 .*?

  • 前言
  • .*?讲解
  • .*?的简单使用
  • .*?的爬虫实战
  • 目标网页
  • 代码分析
  • 效果展示
  • 结语


前言

正则的知识体系其实是非常庞大的,它可以做规则校验、字符匹配等,且非常强大,速度也非常快,我这里针对字符串匹配作出讲解。通常不同的工作者对正则的使用手法层出不穷,所以我这里推荐一种比较好的方法——(.*?),当然这里需要感谢我大学大数据人工智能课程的任课老师,这种方法也是他在课堂上讲过的。

.*?讲解

.*?是对所有匹配规则的一种集合,又称通配符。通配符,顾名思义是指通用的字符, 用来模糊查找信息,通配符能够代替任意字符。有的学者称这种方法其为惰性匹配,其实我个人也是非常赞成这个名字的。

.*?的简单使用

import re

temp = '清风徐来水波不兴,哪个剧本没有分生,愈想证明就愈不肯定,可能完美和完整'
rule = re.compile('清风徐来(.*?),')
print(re.findall(rule,temp))

python通配符怎么用 python 通配符 字符串_python

如上,我们想获取“水波不兴”,只需要知道它的前后是什么,“水波不兴”使用,*?进行通配,然后给通配加上括号进行选取,若不选取则不加括号。是不是非常简单,好那我们继续看看它在爬虫实战中是如何使用的

.*?的爬虫实战

目标网页

我以爬取链家为例,提取房屋的关键信息。https://dy.lianjia.com/ershoufang/rs/

python通配符怎么用 python 通配符 字符串_python_02

代码分析

需要注意的是:字符串中有空格、换行符时需要做替换处理,否则.*?会匹配失败。我这里为了解耦,分两次进行匹配。

import requests
import re

res = requests.get('https://dy.lianjia.com/ershoufang/rs/').text
res = res.replace(' ','').replace('\n','')

data = re.findall(re.compile('<ulclass="sellListContent"log-mod="list">(.*?)</ul>'),res)
data = re.findall(re.compile('DATA"href="(.*?)"target.*?alt="(.*?)">.*?data-sl="">(.*?)</a>.*?houseIcon"></span>(.*?)</div>.*?spanclass="">(.*?)</span><i>(.*?)</i>.*?<span>(.*?)</span>'),data[0])
[print(i) for i in data]

效果展示

可以看到,效果是非常不错的。所以呀,赶紧去试试吧!

python通配符怎么用 python 通配符 字符串_爬虫_03

结语

这里给出我自己的一些经验和使用方法,以上用爬虫举例希望同学们能进一步加深对.*?以及它在数据处理应用中的理解。希望对大家的学习有所帮助