• (06)正则表达式


    温馨提醒:
    import re     要导入正则模块
    s=r'abc'    r代表保留字符原义 ,不会被任何特殊方式处理 可以元字符简化 s=r'[a-c]'
    re.findall(s,'abckkkkk')   返回匹配到s规则 字符列表
    ==================================

    ■ 字符匹配
        ● 普通字符 :字母、字符 匹配自己,如: a  匹配 a  ,hello 匹配 hello
        ● 元字符:.  ^  $  *  +  ?  { }  [ ]    |  ( )
            ◆ [ ]  : a.  指定一个字符集 [abc]; [a-z]
                      b.  元字符在字符集不起作用,只相当于一个普通的符号 [abc$] 这时$只是一个美元符号
                      c.  补集匹配不在区间范围内的字符 [^34a]  -- 表示不在34a 其中一个  取反  一定要字符集开头
                           在其他地方,就相当一人普通的^ 符号;
            ◆ ^  : 匹配行首,只匹配字符串的开始 ^world   只匹配 world开的 ,行中的不匹配
            ◆ $   : 匹配行尾,匹配字符串尾,或换行字符后面的任何位置  boy$  只匹配boy结尾的字符串
            ◆    :  a.取消元字符,使它成为普通的字符  \ {  $  ……
                      b. 跟不同的字母有不同的意义(大写字母,具有取反的意思):
                          d 匹配一个数字字符。等价于 [0-9]
                          D 匹配一个非数字字符。等价于 [^0-9]
                          s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。
                          S 匹配任何非空白字符。等价于 [^ f v]。
                          w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
                          W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
            ◆ |   :  x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 
            ◆ *   : 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。zo*?  非贪婪匹配
            ◆ +  : 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。zo+? 非贪婪匹配
            ◆ ? : 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
            ◆ { }  : a. {n} 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
                      b. {n,}  n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。
                          'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 
                      c. {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。
                         'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
          "d{3,4}-?d{8}"   电话
    ■ 常用函数
        ● re.compile()  编译,这样速度会更快
            r1=r"d{3,4}-?d{8}"
            p_tel=re.compile(r1)
            p_tel=findall('010-12345678')
             p_tel=re.compile(r1,re.I)    #不区分大小写
        ● match()  search() findall()  finditer()    sub()  subn()  split()
        ● matchobject 对象 group() start() end() span()

    ■ 编译标志
        ● S :使 . 匹配包括换行在内的所有字符    针对正则表达
        ● I  : 使匹配对大小写不敏感                   针对字符串
        ● L :做本地化识别
        ● M:多行匹配                                    针对字符串
        ● X:正则本身多行书写                         针对正则表达
        s="""
             hello work
             ok
             """
         re.findall(r"^hello",s,re.M)
         
        tel=r"""
               d{3,4}
                -?
               d{8}
              """
          re.findall(tel,'010-12345678',re.X)

    ■ 分组  (  )
        ● 有或时,一般要用到 email=r"w{3}@w(.com|.cn)"
        ● 返回自己感兴趣的内容 (.*)

    ■ 爬虫
    #!/usr/bin/python
    import re
    import urllib

    def getHtml(url):
         page=urllib.urlopen(url);
         html= page.read()
         return html

    def getImg(html):
          reg = r'src="(.+?.jpg)" width'
          imgre = re.compile(reg)
          imglist = re.findall(imgre,html)
          x=0
          for imgurl in imglist:
               urllib.urlretrieve(imgurl,'%s.jpg' % x)
                x+=1

  • 相关阅读:
    jquery几款不错的插件
    jQuery 闭包
    SQL高手篇:精典SQL FAQ收藏
    完美解决Excel的连接字符串与上传方法
    文件流高级压缩文件和解压缩
    jquery弹窗插件jqueryimpromptu.4.0.js
    SQL Server 2008删除行出现错误“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行”
    那些天我们经历的实时错误—StudentMis小结
    基础很重要,查询如何“组合”!谈谈组合查询
    探究Null、Empty、VbNullstring、Nothing的异同
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5197382.html
Copyright © 2020-2023  润新知