• 正则表达式和re模块


    re的元字符

    import re
    
    ret = re.findall("e..a", "Hermaeus") #"."是模糊表示一个字符
    print(ret)
    
    ['erma']
    
    ret = re.findall("^H..m", "Hermaeus") #"^"表示开头必须是某个字符
    print(ret)
    
    ['Herm']
    
    ret = re.findall("a..s$", "Hermaeus") #"$"表示结尾必须是某个字符
    print(ret)
    
    ['aeus']
    
    ret = re.findall("abc*", "abccccc")  #贪婪匹配[0,+∞]
    print(ret)
    
    ['abccccc']
    
    ret = re.findall("abc+", "abccccc")  #贪婪匹配[1,+∞]
    print(ret)
    
    ['abccccc']
    
    ret = re.findall("abc?", "abccccc")  #惰性匹配[0,1]
    print(ret)
    
    ['abc']
    
    
    ret = re.findall("abc{1,3}", "abccccc")   #贪婪匹配[1,3]
    print(ret)
    
    ['abccc']
    
    ret = re.findall("abc*?", "abccccc")  #这样会让其变成惰性匹配
    print(ret)
    
    ['ab']
    

    字符集[ ]

    即在字符集中任意匹配一个

    import re
    
    ret = re.findall("a[bc]", "abc")
    print(ret)
    
    ['ab']
    
    ret = re.findall("[a-z]", "ahfao")
    print(ret)
    
    ['a', 'h', 'f', 'a', 'o']
    
    ret = re.findall("[%$]", "ada%jf$")  #在字符集里面除了:- ^ 以外都是普通字符
    print(ret)
    
    ['%', '$']
    
    ##" - " 取在这之间的
    ret = re.findall("[1-9]", "1jkah1k2k3j")
    print(ret)
    
    ['1', '1', '2', '3']
    
    ##" ^ " 取反,即在这字符集里面没有的
    ret = re.findall("[^ab]", "7ajkf2bfjab")
    print(ret)
    
    ['7', 'j', 'k', 'f', '2', 'f', 'j']
    
    ##"  " 转义符
    ret = re.findall("[d]", "45dhaf2")
    print(ret)
    
    ['4', '5', '2']
    

    转义符

    • 反斜杠后边跟元字符去除特殊功能,比如.
    • 反斜杠后边跟普通字符实现特殊功能,比如d
    • d匹配任何十进制数;它相当于类 [0-9]。
    • D匹配任何非数字字符;它相当于类 [^0-9]。
    • s匹配任何空白字符;它相当于类 [ fv]。
    • S匹配任何非空白字符;它相当于类 [^ fv]。
    • w匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    • W匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
    • 匹配一个特殊字符边界,比如空格 ,&,#等
    import re
    ret = re.findall(r"I", "I am LIST") ##添加"r",就变成了原生字符串,它表示把需要匹配的字符集直接交给模块处理
    print(ret)
    

    分组 ( )

    import re
    ret = re.search("(?P<id>d{2})/(?P<name>w{3})", "23/com") #"?P<id> 取名
    print(ret)
    
    <_sre.SRE_Match object; span=(0, 6), match='23/com'> #返回一个对象
    
    print(ret.group())
    
    23/com
    
    print(ret.group("id"))
    
    23
    

    |符号

    import re
    
    ret = re.search("(ab)|d", "rabjk4fk") #二选一
    print(ret)
    print(ret.group())
    

    re下的常用方法

    import re
    #findall()方法
    #返回所有满足匹配条件的结果,放在列表里
    re.findall('a','alvin yuan')    
    #search()方法
    #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以;通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    re.search('a','alvin yuan').group()  
    #match()方法
    #同search,不过尽在字符串开始处进行匹配
    re.match('a','abc').group()     
    #split()方法
    #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
    ret=re.split('[ab]','abcd')     
    print(ret)#['', '', 'cd']
    #sub()和subn()方法
    #替代
    ret=re.sub('d','abc','alvin5yuan6',1)
    print(ret)#alvinabcyuan6  
    #替代,且可以选择次数   
    ret=re.subn('d','abc','alvin5yuan6')
    print(ret)#('alvinabcyuanabc', 2)  
    #compile()方法
    #对象赋予
    obj=re.compile('d{3}')  
    ret=obj.search('abc123eeee')
    print(ret.group())#123
    #finditer()方法
    ret=re.finditer('d','ds3sy4784a')
    print(ret)        #<callable_iterator object at 0x10195f940>
                      #返回迭代器
    print(next(ret).group())
    print(next(ret).group())
    
    

    注意:

    import re
     
    ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com')
    print(ret)['oldboy']     #这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
     
    ['oldboy']
    
    ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
    print(ret)
    
    ['www.oldboy.com']
    

    分组

    在正则表达式中,可以对过滤到的字符串进行分组,分组使用圆括号的方式:

    1. group:和group(0)等价,返回的是整个满足条件的字符串
    2. groups:返回的是里面的子组,索引从1开始
    3. group(1):返回的是第一个子组,可以传入多个

    代码实例:

    import re
    text = "apple price is $99,orange price is $10"
    ret = re.search(r".*($d+).*($d+)",text)
    print(ret.group())
    print(ret.group(0))
    print(ret.group(1))
    print(ret.group(2))
    print(ret.groups())
    '''
    result:
    apple price is $99,orange price is $10
    apple price is $99,orange price is $10
    $99
    $10
    ('$99', '$10')
    '''
    
  • 相关阅读:
    Python基础知识(八)—字典
    Python基础知识(七)—元组
    Python基础知识(六)—关于列表深拷贝和浅拷贝及内存图
    Python基础知识(六)—列表
    Python基础知识(五)—字符串
    4、FTP、SSH协议简单介绍
    3、apt-get install xxx时,报错信信息: Could not get lock /var/lib/dpkg/lock-frontend
    2、NFS挂载根文件系统失败:Root-NFS: Unable to get mountd port number from server, using default
    EXPORT_SYMBOL是什么?
    用maven建立一个工程2
  • 原文地址:https://www.cnblogs.com/MingleYuan/p/10706541.html
Copyright © 2020-2023  润新知