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

    re模块<正则表达式>:给字符串进行模式匹配

    元字符: . ^ $ * + ?{} [] ()

    1  . :除了换行符其他均可用.代替(一个点代表一个字符,不能代表多个)

    2 ^ :以...开头

    3 $ :以...结尾

    4 * :以紧挨着*的字符匹配,重复匹配[0,+∞]【贪婪匹配:尽可能多的去匹配】

    5 + :以紧挨着+的字符匹配,重复匹配[1,+∞]

    1 re.findall("ahxb*","dasjbahx")---->['ale']
    2 re.findall("ahcb+",'fgjahx')-----[]
    3 re.findall("ahxb+","fhsdkjlfahxb")--->['ahxb']

    6? :匹配[0,1]次

    ------- 注:*?【惰性匹配,按最小次数进行匹配】

    7 {} :{0,}==*;{0,1}==?;{1,}==+;{6}-->重复6次;{1,6}-->重复1~6次【贪婪匹配】

    8 [] :字符集[括号中无特殊符号] 特例:①"q[a-z]"可匹配a-z的字符 ②"q[^a-z]"可匹配除a-z之外的其他字符③

    1 d:匹配十进制数字
    2 D:匹配任何非数字
    3 s:匹配任何非空白字符
    4 S:匹配任何非空白字符
    5 w:匹配任何字母数字
    6 W:匹配任何非字母数字
    7 :特殊字符串边界 空格、#、&等
    详解
    1 re.findall(r"I","I am ann") #r:不做任何转义送给re模块进行处理
    2 ★re.findall("c\\l")--->python解释器和re解释器双层解释 python解释器将\\解释为\,re解释器将\解释为---->结果为cl

    9: |

    re.findall(r"ka|b","sdjasklnka|bs")#--->['ka','b']

    10: ():分组之后优先给出括号里面的内容

    re.findall("(abc)+","abcabcabc")#--->虽然匹配的是abcabcabc 但是括号里面的(abc)优先被给出即输出结果为['abc']
    re.findall("www.(baidi|123).com","www.baidi.com")#['baidu']-->括号里面的内容优先被给出 即baidu
    re.findall("(?:abc)+","abcabcabc"#-->输出结果:['abcabcabc'] #--->在括号里面开头加上?:
    re.findall("www.(?:baidu|123).com","www.baidu.com")-->['www.baidu.com']

    re模块方法:

    re.search("[a-z]+","adk456dasjc12").group()#search仅寻找一条信息,并返回 'adk'
    re.search("(?P<name>[a-z]+)d+","dhk12fshdkfnl89").group()#--->'dhk12'
    re.search("(?P<name>[a-z]+)d+","dhk12fshdkfnl89").group("name")#--->'dhk'
    re.search("(?P<name>[a-z]+)(?P<age>d+)","ahd12d9").group("age")-->'12'
    re.match("d+","56aq").group()#从开始进行匹配,若不匹配则不返回结果
    ★★re.split("[ab]","ahccdbh")#--->' ','hccd','h'
    re.sub("d+","A","jaak123ahh5")#--->jaakAAAahhA
    re.sub("d+","A","jaak123ahh5",2)#--->jaakAA3ahh5【2是指匹配前两个】
    --->(可用多次)com=re.compile("d+")
                        com.findall("fah12dsj9fd")#--->['12','9']
    ★★re.finditer("d","fshd56fsdgy78fs")#-->此方法是将结果封装到迭代器里面返回迭代器对象 数据大、结果多可以使用,用一条处理一条,不会将全部的结果一次性加载到内存里  
    ret=re.finditer("d","sasdh45sds89sd6m")
    next(ret).group()--->'45'
    next(ret).group()--->'89'
    #计算"12+(45*9-(2+1)+5*24)"
    方法一:
    print(eval("12+(45*9-(2+1)+5*24)"))
    方法二:(正则表达式匹配最里面括号 即最先计算的括号)
    import re
    re.findall("([^()*])","12+(45*9-(2+1)+5*24)")#---》['2+1']
    #(--->以(开头 因为在[]中 ()有意义,所以需转化为普通的()
    #^()--->没有以()开头的 即最里面层
    #*--->匹配最里面括号里面的内容
    #)---> 以)结尾

      

  • 相关阅读:
    cpu几种架构区别
    linux之cp/scp命令+scp命令详解
    解读Linux命令格式(转)
    IO虚拟化简单了解
    NoSQL-来自维基百科
    kvm命令参数记录
    kvm 简单了解
    host与guest间共享文件夹的三种方法(原创)
    新装linux系统最基本设置
    kernel编译速度提高
  • 原文地址:https://www.cnblogs.com/gl-gl/p/9195024.html
Copyright © 2011-2022 走看看