【问题标题】:Python Regex Sub with Multiple Patterns具有多种模式的 Python 正则表达式子
【发布时间】:2018-07-31 05:32:30
【问题描述】:

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

    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     *

【问题讨论】:

    标签: python regex


    【解决方案1】:

    Alternation 不会重置组编号,因此您的组编号类似于(1)(2)|(3)(4)|(5)(6),但您只重新插入组 1 - 但组 3 和组 5 也应该这样做。由于替换时不匹配的组被视为空字符串,您可以简单地将它们添加到您的模式中,例如\g&lt;1&gt;\g&lt;2&gt;\g&lt;3&gt;*

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

    【讨论】:

    • 效果很好!感谢您的解释和原始字符串提示!
    • “交替不重置组号”。感谢您提供清晰简洁的解释。
    • “交替不重置组号”。您可以“可视化”它: print(match.findall(myString))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多