具有多种模式的 Python Regex Sub

2024-03-31

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

    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)(2)|(3)(4)|(5)(6)但您只需要重新插入第 1 组 - 但也应该对第 3 组和第 5 组执行此操作。由于替换时不匹配的组被视为空字符串,因此您可以简单地将它们添加到您的模式中,例如\g<1>\g<2>\g<3>*.

在旁注中,我建议在使用正则表达式模式时使用原始字符串(r'pattern'),因此您不必想知道在哪里使用双反斜杠(例如\\b).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多种模式的 Python Regex Sub 的相关文章

随机推荐