具有多个模式的Python正则表达式子类

具有多个模式的Python正则表达式子类,python,regex,Python,Regex,我正在尝试使用regex子分组匹配多个模式,并用星号替换匹配的数据文件,该数据文件的格式与下面的字符串类似。然而,我在第一场比赛中只得到了想要的结果。随后的匹配使用了我没有预料到的字符串。是否有更好的方法获得下面所需的输出 import re myString = '-fruit apple -number 123 -animal cat -name bob' match = re.compile('(-fruit\s+)(\w+)|'

我正在尝试使用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 -animal  *  -name     *

交替不会重置组号,因此您的组编号类似于
(1)(2)|(3)(4)|(5)(6)
,但您只需重新插入组1,但也应重新插入组3和组5。因为在替换时,不匹配的组被视为空字符串,所以您可以简单地将它们添加到模式中,如
\g\g*


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

,这很好用!感谢您的解释和原始字符串提示!“交替不会重置组号”。感谢您提供的清晰简洁的解释。“更改不会重置组号”。您可以“可视化”它:print(match.findall(myString))
-fruit * -number    123 -animal  *  -name     *