zoukankan      html  css  js  c++  java
  • re 模块

    正则表达式

    • 元字符

      • w s d W S D
      •  ^ $
      • |
      • ()
      • [][^]
    • 量词

      • * + ?
      • {n} {n,} {n,m}
    • 贪婪和惰性匹配

      • 默认贪婪 :尽可能多的匹配 ---回溯算法
      • 惰性匹配:尽可能少的匹配 ----量词?
      • .*?x
    • re 模块

    • findall:从文件中选取需要的内容

      • 返回一个列表,所有匹配 的项,没有匹配到就返回一个空列表

      • 如果遇到分组,finall会优先显示分组中的内容

      • (?:正则表达式)取消分组优先

      • import re
        ret = re.findall("www.(baidu|oldboy).com","www.baidu.com")
        print(ret)  #['baidu'] 这是因为findall会优先显示分组中的内容
        ret = re.findall("www.(?:baidu|oldboy).com","www.baidu.com")
        print(ret)  #['www.baidu.com']  可以同过?:取消分组的优先级
        

        (?P<组名>正则表达式) 表示个这个组起一个名

        (?P=组名)表示引用之前组的名字,引用部分匹配的内容必须和之前那个组名的内容相同

      pattern = "<(?P<tag>.*?)>.*?</(?P=tag)>"
      #pattern = r'<(.*?)>.*?</1>'与上面用法一样
      ret = re.search(pattern,"<alex>afjsh</alex>")
      print(ret)  #<_sre.SRE_Match object; span=(0, 18), match='<alex>afjsh</alex>'>
      ret = re.search(pattern,"<alex>afjsh</egon>")
      print(ret)  #None
      
    • search: 验证用户输入内容“正则规则$”

      • 返回一个对象,通过.grop()取值
      • 没有匹配到会返回None,没有.grou()方法
        • 所以通常先判断,再取值
        • if ret:
          • ret.gout()
      • 如果遇到分组,通过索引可以去各分组的内容
      • grouo(0) #==group()永远是完整的匹配内容
    • match 验证用户输入内容

      • 与search功能类型相当于

      • `search("^d","134afdksj") #==》match("d","134afdksj") 作用是一样的

      • import re
        ret = re.match("d+","213asflk32")
        if ret:
            print(ret.group())  #213
        #等同与
        ret = re.search("^d+","213asflk32")
        if ret:
            print(ret.group())  #213
        
    • 切割split

      • 常用来

      • s1 = "alex8123egon1120boss_jin"
        ret = re.split("d+",s1)
        print(ret)      #['alex', 'egon', 'boss_jin']
        #如果需要保留以什么进行分割的,需要用的分组
        ret = re.split("(d+)",s1)
        print(ret)      #['alex', '8123', 'egon', '1120', 'boss_jin']
        
      • ret = re.split("[ab]","afsdabcd")
        print(ret)  #['', 'fsd', '', 'cd']这里对字符串分割了俩次,先用a分割后再用b来进行分割
        
    • 替换sub 和subn

      • #替换sub
          s = "alex|egon|boss_jin"
          print(s.replace("|","-"))   #alex-egon-boss_jin
          s1 = "alex8123egon1120boss_jin"
          ret = re.sub("d+","-",s1)  #内部接受四个参数,可以选择替换次数,默认全部替换
          print(ret)  #alex-egon-boss_jin
          ret1 = re.subn("d+","-",s1)
          print(ret1) #('alex-egon-boss_jin', 2) #subn会返回一个元组,显示替换后的字符串和替换次数
        
    • compile 编译正则规则,

      • 运用场景:编译正则规则,对多个字符串进行相同数据查找,节省时间,内存

      • obj = re.compile("d{3}")  #将正则表达式编译成一个正则表达式对象,
        ret = obj.search("afskj234afjk")
        print(ret.group())  #234
        ret1 = obj.search("afs2155fahfj")
        print(ret1.group()) #215
        
    • finditer #节省空间的方法,可以和compile配合使用

      • ret = re.finditer("d+","fsa213fajks24fjs243")
        print(ret)#<callable_iterator object at 0x000002703FFA9390>  一个迭代器
        for i in ret:
            print(i.group())    #213   24   243
        
  • 相关阅读:
    http请求消息体和响应消息体
    整型常量
    C语言中字符串后面的'\0'
    String类
    二进制转成十六进制
    http消息头
    NULL和NUL
    拷贝构造函数和赋值表达式
    awk中的FS
    之前给女性网增加的一个滚动展示
  • 原文地址:https://www.cnblogs.com/yuncong/p/9629089.html
Copyright © 2011-2022 走看看