0x01 re基础
使用re模块,必须先导入re模块
import re
- findall():匹配所有符合正则的内容,返回的是一个列表
import restr = "我的电话:10086,女朋友电话:11011"
list = re.findall('\d+',str)
print(list)
- finditer():匹配所有符合的内容,返回的是迭代器,使用group可取到内容
import restr = "我的电话:10086,女朋友电话:11011"
ite = re.finditer('\d+',str)
for i in ite:print(i.group())
- search():只匹配一个,返回的是match对象,获得匹配数据要使用group()
import restr = "我的电话:10086,女朋友电话:11011"
ite = re.search('\d+',str)
print(ite.group())
- match():只在开头匹配
import restr = "我的电话:10086,女朋友电话:11011"
ite = re.match('\d+',str)
print(ite.group())
将10086放在字符串最前面就可以匹配了
- compile():预加载正则表达式
import restr = "我的电话:10086,女朋友电话:11011"com = re.compile('\d+')
lst = com.findall(str)
print(lst)
0x02 案例
案例1
获取下面字符串里面的名字和ID:
'''
<div class='jcw'><span id='1'>金城武</span></div>
<div class='hg'><span id='2'>胡歌</span></div>
<div class='pyy'><span id='3'>彭于晏</span></div>
<div class='az'><span id='4'>阿祖</span></div>
'''
程序:
import restr = '''
<div class='jcw'><span id='1'>金城武</span></div>
<div class='hg'><span id='2'>胡歌</span></div>
<div class='pyy'><span id='3'>彭于晏</span></div>
<div class='az'><span id='4'>阿祖</span></div>
'''com = re.compile("<div class='.*?'><span id='(?P<id>\d+)'>(?P<name>.*?)</span></div>")
result = com.finditer(str)
for i in result:print(i.group('id'),i.group('name'))
在预编译中有(?P\d+),(?P)是告诉处理器,括号里面的内容需要注意,我需要单独拿出来,<>
里面是告诉处理器,这里拿出来的内容叫什么名字,后面可以根据这个名字对(?P)匹配的内容单独处理,比如后面group('id')
直接根据名字取出数据
案例2
爬取豆瓣电影top250的电影名、导演、时间
程序:
import re
import requestsurl = 'https://movie.douban.com/top250'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'}
response = requests.get(url=url,headers=headers)
content = response.textobj = re.compile('<li>.*?<div class="item">.*?<div class="info">''.*?<span class="title">(?P<name>.*?)</span>.*?''<p class="">(?P<name2>.*?) .*?<br>(?P<age>.*?) ',re.S)result = obj.finditer(content)
for it in result:print(it.group("name"))print(it.group('name2').strip())print(it.group('age').strip())
结果:
compile中的re.S是让.
匹配任何字符,换行符也匹配