import re
re.findall('需要配陪的规则','被匹配的内容内容')
(.)点代表通配符,但他不能替代\n这个
(^a)被匹配的内容必须以a开头的字符串
(a$)被匹配的内容必须以a结尾的字符串
(a*)a可以被重复0到无穷次数
(a+)a必须要有1次或者1次以上
(a{1,4}) a必须含有1到4个必须要有一个但是不能超过4个以上
(a?)a可以不出现也可以出现
\d 匹配任何十进制数; 它相当于类 [0-9]。 \D 匹配任何非数字字符; 它相当于类 [^0-9]。 \s 匹配任何空白字符; 它相当于类 [ \t\n\r\f\v]。 \S 匹配任何非空白字符; 它相当于类 [^ \t\n\r\f\v]。 \w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_]。 \W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_] \b 匹配一个特殊字符边界,比如空格 ,&,#等
(())匹配括号内的
search()模块
ret=re.search('条件',‘匹配内容’)
search只匹配成功内容的第一个内容
print(ret.group())
match()模块
ret=re.match('条件','匹配内容')
仅仅匹配开头是满足条件
print(ret.group())
如果我们想用.匹配所有的
那么我们需要re.findall('','',re.s)
贪婪模式:
例如(‘abc+’,‘abccccccccb’)
他会一直匹配到不满足条件在停止
这种方式叫贪婪匹配
非贪婪模式
例如(‘abc+?’,‘abccccccccb’)
由于+号代表1-n所以会匹配最小1次就停止
也就是返回abc
s='aaaaa123bbbb'
re.split('\d+',s)
打印效果
[aaaaa,bbbb]
re.split('\d+',s,2)
会分两次分成3份
因为我们进行分割的时候通常分隔符是会丢弃的
既然已分隔符为条件那么我们就把它\d+改成(\d+)这样就可以了
re.sub('规则并且是要被替换掉的','新的内容',字符串)
像replace
re.compile:编译的意思
obj=re.compile('规则')
obj.findall('被匹配的字符串')
re.finditer(‘规则’,'内容') 相当于iter 可以返回一个迭代器对象
下面我们用正则遍历一下豆瓣
import requests
import re
import json
dic={} l=["https://movie.douban.com/top250?start=0&filter=","https://movie.douban.com/top250?start=25&filter=","https://movie.douban.com/top250?start=50&filter=","https://movie.douban.com/top250?start=75&filter=","https://movie.douban.com/top250?start=100&filter=","https://movie.douban.com/top250?start=125&filter=","https://movie.douban.com/top250?start=150&filter=","https://movie.douban.com/top250?start=175&filter=","https://movie.douban.com/top250?start=200&filter=","https://movie.douban.com/top250?start=225&filter="] ll=[] def rr(url): r=requests.get(url) #print(type(respnse_str.text)) return r.text def num(url): res=rr(url) obj=re.compile('<div class.*?>.*?<em.*?>(\d+)</em>.*?<span class="title">(.*?)</span>.*?<p class="">.*?导演:(.*?)&.*?</p>.*?<div class="star">.*?<span>(.*?)</span>',re.S) ret=obj.findall(res) return ret for i in l: for b in num(i): ll.append(b) for i in ll: dic[i[0]]={'名字':i[1],'导演':i[2],'评论数':i[3]} w=open('movie.txt','w',encoding='utf-8') json.dump(dic,w,sort_keys=True,indent=4,ensure_ascii=False