• 正则表达式和动态替换


    正则表达式修饰符:

    w:数字,字母,下划线
    d:阿拉伯数字
    s:空白字符:换行,空格,制表符
    []: 一组字符
    ():分组字符
    (|) :任一字符;管道字符|
    ()?:可选匹配
    {}?:非贪心匹配
    重复修饰符: (*, +, ?, {m,n}..)
    {}:字符个数或范围
    * :>=0次
    + :>=1次
    . :通配符
    .*:除换行的所有字符

    正则表达式的动态替换:

    python 中 re.sub方法不仅可以传入正则表达式,也可以传入函数,其中函数输入参数为 SRE_Matcher 案例如下:

    另外,正则表达式选择分组的方法 $1 在 python 中写作 g<1>,为了避免歧义,匹配小数点时建议使用 2 个反斜线 \

    import re
    p = 's1.b2.bn.weight'
    p = 's1.b2.proj.weight'
    p = 's1.b1.f.a_bn.num_batches_tracked'
    # p = 's1.b1.f.b.k4.1.running_var'
    d = 'res2.1.shortcut.norm.weight'
    
    # pattern = "^s(d+)\.b(d+)\.bn\.(w+)$"
    # pattern = "^s(d+)\.b(d+)\.(bn|proj)\.(w+)$"
    # pattern = "^s(d+)\.b(d+)\.(bn|proj|f\.w+|f\.w+\..*)\.(w+)$"
    pattern = "^s(d+)\.b(d+)\.(bn|proj|f\..*)\.(w+)$"
    new = "resg<1>.g<2>.shortcut.norm.g<3>"
    
    def f(matcher):
        gs = matcher.groups() # 可以得到每个组的元素 tuple
        string = matcher.expand(new) # 和 re.sub 等价的方法
        print('gs:',gs)
        return matcher.expand(new)
    
    
    ret = re.sub(pattern, f, p)
    print('returned:', ret)
    
    # 输出为
    # gs: ('1', '1', 'f.a_bn', 'num_batches_tracked')
    # returned: res1.1.shortcut.norm.f.a_bn
  • 相关阅读:
    LINUX挂接移动硬盘
    LINUX挂接光盘镜像文件
    Parted:2T以上磁盘分区工具(LINUX挂载2T以上磁盘)
    LINUX文件系统操作命令
    linux 文件类型的颜色
    LINUX常用操作命令和命令行编辑快捷键
    telnet- Linux必学的60个命令
    Netstat- Linux必学的60个命令
    linux服务之maven
    PHP 设计模式 笔记与总结(4)PHP 链式操作的实现
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/13336097.html
Copyright © 2020-2023  润新知