代码之家  ›  专栏  ›  技术社区  ›  MBasith

具有多个模式的Python Regex Sub

  •  2
  • MBasith  · 技术社区  · 6 年前

    我尝试使用regex子分组来匹配多个模式,并用星号替换与下面字符串格式类似的数据文件的匹配。然而,我只得到了第一场比赛想要的结果。随后的匹配正在消耗我没有预料到的字符串。有没有更好的方法来获得下面的期望输出?

        import re
        myString = '-fruit apple -number    123 -animal  cat  -name     bob'
    
        match = re.compile('(-fruit\s+)(\w+)|'
                           '(-animal\s+)(cat)|'
                           '(-name\s+)(bob)')
        print(match.sub('\g<1>*', myString))
    

    电流输出:

    -fruit * -number    123 *  *
    

    期望输出:

    -fruit * -number    123 -animal  *  -name     *
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Sebastian Proske    6 年前

    交替不会重置组号,因此您的组号如下 (1)(2)|(3)(4)|(5)(6) 但是您只需要重新插入组1—但是对于组3和组5也应该这样做。由于替换时不匹配的组被视为空字符串,所以您可以简单地将它们添加到您的模式中,如下所示 \g<1>\g<2>\g<3>* .

    另外,我建议在使用regex模式时使用原始字符串( r'pattern' ),所以您不必想知道在何处要使用双反斜杠(例如。 \\b ).