zoukankan      html  css  js  c++  java
  • 正则表达式和内置模块re

    import re

    re.findall('需要配陪的规则','被匹配的内容内容')

    (.)点代表通配符,但他不能替代 这个

    (^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  匹配任何空白字符;      它相当于类 [ fv]。 S  匹配任何非空白字符;    它相当于类 [^ fv]。 w  匹配任何字母数字字符;   它相当于类 [a-zA-Z0-9_]。 W  匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]   匹配一个特殊字符边界,比如空格 ,&,#等

    (())匹配括号内的

    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
  • 相关阅读:
    汇编之EBP的认识。
    【转】PE详解
    迟到的,2016年终总结
    Java 反射
    Java 集合与容器类
    Java 类加载与实例化
    Java 类与对象
    Java 值传递与对象拷贝
    Java 面向对象
    二叉树
  • 原文地址:https://www.cnblogs.com/935415150wang/p/7080734.html
Copyright © 2011-2022 走看看