• python day 25--正则表达式


    一、字符组

    1.[0-9]表示匹配0-9中的数字

    2.[a-z]表示匹配a-z之间的字母

    3.[A-Z]表示匹配大写的字母

    4.[0-9a-zA-Z]匹配所有字母数字

    二、元字符

    1.d 匹配任意数字   

    2.w 匹配字母数字下划线

    3.s 匹配任意空字符

    4. 匹配换行符

    5. 匹配制表符

    6. .(点)匹配除换行符之外的任意字符

    7.D 匹配除数字之外的任意字符

    8. W 匹配除字母数字下划线之外的任意字符

    9.S 匹配非空字符

    10.a|b,匹配符合a或b的字符,当条件有重叠时,应该把范围广的放在左边。

    11.(),分组匹配,一般搭配RE模块中的findall,search使用表示优先匹配。

    12.[...]  匹配字符组中的字符

    13 [^...]  匹配除字符组外的字符

    三、量词

    1.* 表示匹配0-无穷次的字符

    2. + 匹配1-无穷次的字符

    3. ?表示重复0次或一次,在量词的后面跟了一个 ? 表示取消贪婪匹配 :.*?跟上字符表示匹配任意字符知道找到符合条件的字符就不在找。

    4.{n}表示前面的重复n次

    5.{n,}表示至少重复n次

    6.{n,m}表示重复n-m次,但是以匹配数量多的优先

    四、转义符

    在python中有特殊意义,比如 表示换行,如果要匹配‘ ’需要在前面加上\,就是'\n'。如果要匹配‘\n’,就是‘\\n’两个\。如果有多个\就要加几个\会有点麻烦,所以只需要在前面加r',r' 就可以了。

    五、re模块的常用方法

    1. findall

    import re
    # ret = re.findall('-0.d+|-[1-9]d*(.d+)?','-1asdada-200')#前面是正则表达式,后面是待匹配的字符
    ret = re.finditer('d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
    # ret1 = re.findall('www.(oldboy).com','www.oldboy.com')#会优先匹配括号里的正则表达式,结果:oldboy,(:?oldboy):?表示取消优先匹配
    # print(ret)#返回列表

    2.search  

    # ret = re.search('d+(.d+)(.d+)(.d+)?','1.2.3.4-2(60(-40.35/5)-(-4*3))')
    # print(ret.group())
    # print(ret.group(1))
    # print(ret.group(2))
    # print(ret.group(3))
    #search可以节省内存,但是打印时要加上.group(),(1)表示显示第一个,不加数字表示显示全部

    3.spilt

    # ret = re.split('d+','alex83egon20taibai40')
    # print(ret)
    按照匹配到的结果进行切割

    4.分组命名

    # ret = re.search(r'<(?P<tag>w+)>(?P<c>w+)</(w+)>',r'<a>wahaha</b>')
    # print(ret.group())
    # print(ret.group('tag'))
    # print(ret.group('c'))
    ?P<名字>,可以给匹配到的内容命名,这样.group(名字),可以输出指定名字的内容
     

    5.爬虫练习

    import re
    from urllib.request import urlopen
    # 内置的包 来获取网页的源代码 字符串
    # res = urlopen('http://www.cnblogs.com/Eva-J/articles/7228075.html')
    # print(res.read().decode('utf-8'))
    
    def getPage(url):#请求内容
        response = urlopen(url)
        return response.read().decode('utf-8')
    
    def parsePage(s):   # 获取 网页源码
      com = re.compile(
            '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
            '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)
        ret = com.finditer(s)#节省内存
        for i in ret:
            ret = {
                "id": i.group("id"),
                "title": i.group("title"),
                "rating_num": i.group("rating_num"),
                "comment_num": i.group("comment_num")
            }
            yield ret
    
    def main(num):
        url = 'https://movie.douban.com/top250?start=%s&filter=' % num  # 0
        response_html = getPage(url)   # response_html是这个网页的源码 str
        ret = parsePage(response_html) # 生成器
        print(ret)
        f = open("move_info7", "a", encoding="utf8")
        for obj in ret:
            print(obj)
            data = str(obj)
            f.write(data + "
    ")
        f.close()
    
    com = re.compile(
            '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
            '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)
    count = 0
    for i in range(10):
        main(count)  # count = 0
        count += 25
  • 相关阅读:
    Cocos Creator 镜头跟随(cc.follow)
    Cocos Creator 虚拟摇杆
    Creator Cocos 获取舞台尺寸 (屏幕大小)
    Cocos Creator中的计时器 (setTimeOut ,setInterval,Schedule )
    Cocos Creator Touch_End的触发条件 (Mouse事件)
    Cocos Creator Spine骨骼动画 (局部换装、全局换装)
    Cocos Creator 粒子效果
    Cocos Creator 的Http和WebSocket
    Android中图表AChartEngine学习使用与例子
    Android应用加入微信分享
  • 原文地址:https://www.cnblogs.com/snackpython/p/10116439.html
Copyright © 2020-2023  润新知