zoukankan      html  css  js  c++  java
  • python3 正则表达式re模块

    正则表达式的功能:字符串的模糊匹配查询
    import re

    元字符
    . ---->匹配除换行符意外的任意字符
    ^ ---->匹配行首位置
    $ ---->匹配行尾位置
    
    关于重复的元字符
    * ---->(0,无穷)
    + ---->(1,无穷)
    ? ---->(0,1)
    {} --->指定次数


    转义符
    1、反斜杠后边跟元字符去除特殊功能,比如.
    2、反斜杠后边跟普通字符实现特殊功能,比如d
    d  匹配任何十进制数;      它相当于类 [0-9]。
    D  匹配任何非数字字符;    它相当于类 [^0-9]。
    s  匹配任何空白字符;      它相当于类 [ 	
    
    fv]。
    S  匹配任何非空白字符;    它相当于类 [^ 	
    
    fv]。
    w  匹配任何字母数字字符;   它相当于类 [a-zA-Z0-9_],也可以匹配汉字。
    W  匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]
      匹配一个特殊字符边界,比如空格 ,&,#等

     的应用
    ret=re.findall(r'I','I am LIST')
    print(ret)#['I']

    正则应用
    res = '\'  #是转义符,前面再加个
    print(res)  #
    
    res = '\n'
    print(res) #
    
    
    
    ret=re.findall("(李w{1,2})","李杰,李刚,王超,占山,李连英")  # 匹配出所有符合条件的元素
    print(ret)
    # ret=re.findall('cl','abcle')
    # print(ret)#报错
    
    # ret=re.findall('c\l','abcle')
    # print(ret)#报错
    
    ret=re.findall('c\\l','abcle')
    print(ret)#['c\l']
    
    ret=re.findall(r'c\l','abcle')
    print(ret)#['c\l']
    
    
    # 是特殊符号所以,'abce'前面需要加r
    ret=re.findall(r'c\b',r'abce')
    print(ret)#['c\b']

    分组 ( )
    # 普通分组
    m = re.findall(r'(ad)+', 'add')
    print(m)
    # 命名分组
    import re
    # ret = re.search(r'-blog-aticles-(20[01]d)-(d+)','-blog-aticles-2015-04')
    ret = re.search(r'-blog-aticles-(?P<year>20[01]d)-(?P<month>d+)','-blog-aticles-2015-04')
    print(ret.group())
    print(ret.group('year'))
    print(ret.group('month'))


    字符集[]
    #[abc] 匹配a或b或c
    ret = re.findall('a[bc]d', 'acd')
    print(ret)  # ['acd']
    
    ret = re.findall('[a-z]', 'acd')
    print(ret)  # ['a', 'c', 'd']
    
    ret = re.findall('[.*+]', 'a.cd+')
    print(ret)  # ['.', '+']

    在字符集里有功能的符号: - ^
    ret = re.findall('[1-9]', '45dha3')
    print(ret)  # ['4', '5', '3']
    
    ret = re.findall('[^ab]', '45bdha3')  # ^ 非字符集里面所有符号
    print(ret) # ['4', '5', 'd', 'h', '3']  ret = re.findall('[d]', '45bdha3') print(ret) # ['4', '5', '3']
    
    

    re模块下的常用方法
    import re
    
    ret = re.findall('a', 'alvin yuan')  # 返回所有满足匹配条件的结果,放在列表里
    print(ret)
    
    ret = re.search('a', 'alvin yuan').group()
    print(ret)
    print(type(ret))
    # 函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
    # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    
    ret = re.match('a', 'abc').group()  # 同search,不过尽在字符串开始处进行匹配
    print(ret)
    findall的优先级查询
    import re
    
    ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
    print(ret)  # ['oldboy']     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
    
    ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')  # ?:取消组优先
    print(ret)  # ['www.oldboy.com']
  • 相关阅读:
    第 33课 C++中的字符串(下)
    第 33课 C++中的字符串(上)
    第32课 初探C++标准库
    第31课 完善的复数类
    第30课 操作符重载
    第29课 类中的函数重载
    C++和C的相互调用
    函数重载遇上函数指针
    函数重载分析
    第2课 算法的效率问题
  • 原文地址:https://www.cnblogs.com/lucaq/p/7081965.html
Copyright © 2011-2022 走看看