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

    '''
    1. 元字符
    符号 含义
    . 匹配除换行以外的任意字符
    ^ 匹配字符串的开始位置,在[]中出现为非的意思
    $ 匹配字符串的结束位置
    * 匹配0次、1次或多次前面的原子
    ? 匹配0次或1次前面的原子
    + 匹配1次或多次前面的原子
    {n} 前面的原子恰好出现n次
    {n,} 前面的原子至少出现n次
    {n,m} 前面的原子至少出现n次,至多出现m次
    | 模式选择符
    () 模式单元符,作分组:在findall 中使用,返回的参数是()中匹配的值,不会管外面其他参数
          (?:reg):取消优先级,在findall中使用,会返回满足全部正则的字符,而不是返回字符的一部分(reg是变量)
          (?P<name>);给分组指定name. (name是变量)
       [] 字符集,里面出现的字符都只表示某一个字符,不会有转义问题
        eg:
        [a-z0-9A-Z] 数字,大小写字母中的一个

    通用字符
    符号 含义
    w 匹配任意一个字母、数字或下划线
    W 匹配除字符、数字和下划线以外的任意一个字符
    d 匹配任意一个十进制数
    D 匹配除十进制数以外的任意一个其它字符
    s 匹配任意一个空白字符
    S 匹配除空白字符以外的任意一个其它字符
    :表示字母数字与非字母数字的边界, 非字母数字与字母数字的边界。
    B:表示字母数字与(非非)字母数字的边界,非字母数字与非字母数字的边界。

    eg:匹配以a开头的字符串
    str = 'adfd fdfad1a 2 a31 fda a'
    pattern = r'aw*'
    print(re.findall(pattern,str))
    2. 贪婪模式与懒惰模式
    pattern1 = "p.*n" # 贪婪模式
    pattern2 = "p.*?n" # 懒惰模式
    ?指定前一个数量元字符匹配次数为1(*为0-1)


    3. 模式修正符
    符号 含义
    I 匹配时忽略字母大小写
    M 多行匹配
    L 做本地化识别匹配
    U 根据Unicode字符及解析字符
    S 使元字符"."匹配包括换行在内的所有字符
    X 使存在分行符的正则表达式,也能正确匹配(目的:让表达式逻辑更清晰)

    re.findall('pattern1','str',re.I)

    4. RE中常用的方法(函数)

    方法/属性 作用
    re.match(pattern, string, flags=0) 从字符串的起始位置匹配,成功返回MatchObject 实例,失败就返回none
    re.search(pattern, string, flags=0) 查找第一个成功的匹配,返回SearchObject 实例,失败就返回none
    re.findall(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个列表返回
    re.finditer(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个迭代器返回
    re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串
    re.subn(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串,并返回一个元组:(result,替换了几次)
    re.split(pattern, string, maxsplit=0, flags=0) 根据正则,对源字符串进行切割
    re.compile(pattern[, flags])
    作用:把正则表达式语法转化成正则表达式对象,通过对象来调用函数
         好处:
          1.此函数是先编译为正则对象再来调用,因此在多次匹配时,可以减少编译次数
          2.函数调用更简捷,不用再传pattern
        函数参数说明:
    pattern:匹配的正则表达式。
    string:要匹配的字符串。
    flags:标记为,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
    repl:替换的字符串,也可作为一个函数。
    count:模式匹配后替换的最大次数,默认0表示替换所有匹配。
    maxsplit:最大切割次数

    分组函数返回实例:
    方法/属性 作用
    group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
    groups() 返回包含所有小组字符串的元组,从1到所含的小组
    groupdict() 返回以有别名的组的别名为键、以该组截获的子串为值的字典
    start() 返回匹配开始的位置
    end() 返回匹配结束的位置
    span() 返回一个元组包含匹配(开始,结束)的位置
    '''


    import re

    def re_object_test():
    '''
    类似的函数有:match()、search()…,返回值为一个对象

    方法: 功能:
    group() 返回 RE 匹配的字符串值
    start() 返回 匹配开始的位置
    end() 返回 匹配结束的位置
    span() 以元组形式返回 匹配( 开始,结束 ) 的位置
    '''
    pattern = r"python." # 设定以 "python" 为切割标识符
    string = "ABCpython2DEFpython3GHIpython4567"

    result = re.search(pattern, string)

    print(result.group()) # 输出匹配的内容
    print(result.span()) # 输出匹配的位置信息
    print(result.start()) # 输出匹配内容的 起始位置
    print(result.end())
    def sub_test():
    '''
    查找并替换
    语法格式:
    re.sub(pattern, repl, string, count=0, flags=0)
    pattern:传入需要匹配的正则表达式。
    repl:替换后的字符串
    string:传入需要匹配的源字符串。
    count:指定替换的个数
    flags:标志位(可选参数),可传入“模式修正符”等信息。
    '''
    pattern = r"python."
    string = "ABCpython2DEFpython3GHIpython4567"

    result1 = re.sub(pattern, "java", string) # 默认替换所有
    result2 = re.sub(pattern, "java", string, 2) # 替换 2 次

    print(result1)
    print(result2)
    def split_test():
    '''
    语法格式:
    re.split(pattern, string, maxsplit=0, flags=0)
    pattern:传入需要匹配的正则表达式。
    string:传入需要匹配的源字符串。
    maxsplit:指定最大的切割次数
    flags:标志位(可选参数),可传入“模式修正符”等信息。
    '''
    pattern = r"python" # 设定以 "python" 为切割标识符
    string = "ABCpython2DEFpython3GHIpython4567"

    result1 = re.split(pattern, string) # 全局切割
    result2 = re.split(pattern, string, 2) # 只切割 2 次

    print(result1)
    print(result2)
    def search_test():
    '''
    re.search(pattern, string[, flags])
    返回第一个查找到的
    作用:在字符串中查找匹配正则表达式模式的位置,返回 MatchObject
    的实例,如果没有找到匹配的位置,则返回 None。
    '''
    pattern = r"(?P<name>python)(?P<t>.)"
    string = "ABCpython2DEFpython3GHIpython4567"
    res = re.search(pattern,string)
    print(res.group('t'))
    print(res.group(1))
    print(res.groupdict())
    print(res.span())
    pass
    if __name__ == "__main__":
    # sub_test()
    # split_test()
    # re_object_test()
    search_test()
  • 相关阅读:
    log4net GetLogger(source).IsInfoEnabled = false
    nginx配置
    mysql数据库备份
    按序号批量更新某个字段
    MySql 执行 DELETE/UPDATE时,报 Error Code: 1175错误
    ef学习记录
    vue-cli3实行路径联想
    GitHub分支创建及合并
    Git本地分支和远程分支关联
    uniapp(三)
  • 原文地址:https://www.cnblogs.com/lides/p/11116963.html
Copyright © 2011-2022 走看看