Python 非贪婪组后面的可选组

Python 非贪婪组后面的可选组,python,regex,Python,Regex,我对正则表达式并不完全陌生,我已经在很多场合使用过它们,但大多数情况下都没有像lookaheads这样的“花哨”东西。 我需要一个可以匹配以下两种模式的正则表达式: PrefTextValue13 PrefText 字符串“Pref”总是在那里,我想忽略它Text'是我需要的一个组,它由[\w\d\u]+匹配。字符串“Value”,当有时应该忽略,但当有时必须后跟一个我需要作为一个组捕获的数字(\d+)。“值”和“数”都是可选的 示例: 对于案例1),我需要将“文本”匹配为第1组,将13匹配为第

我对正则表达式并不完全陌生,我已经在很多场合使用过它们,但大多数情况下都没有像lookaheads这样的“花哨”东西。 我需要一个可以匹配以下两种模式的正则表达式:

  • PrefTextValue13
  • PrefText
  • 字符串“Pref”总是在那里,我想忽略它Text'是我需要的一个组,它由
    [\w\d\u]+
    匹配。字符串“Value”,当有时应该忽略,但当有时必须后跟一个我需要作为一个组捕获的数字
    (\d+)
    。“值”和“数”都是可选的

    示例: 对于案例1),我需要将“文本”匹配为第1组,将13匹配为第2组;对于2)我不想只匹配文本。 我的尝试(众多尝试之一)是:

    但我不能正确理解它。

    尝试使用此正则表达式:

    re.compile(r'^Pref(\w+?)(?:Value(\d+))?$')
    
    请注意,
    [\w\d][/code>与
    \w
    相同

    您必须将
    Value\d+
    作为可选项一起设置。为此,你必须让他们成为一个团体。但由于您不想捕获它们,因此可以使用非捕获组。此外,您还可以将其中的
    \d+
    部分设置为捕获组,以便获得该部分

    “Pref(\w+(:Value(\d+))”
    的问题是,
    \w+
    将匹配所有内容直到最后,并满足正则表达式,因为
    Value\d+
    部分是可选的。因此,所有内容都将在
    \w+
    中捕获。所以,你必须让它不情愿-
    \w+?


    现在,您想要的输出在第1组和第2组中。对于第二种情况,第2组将为
    null

    ,问题是所有
    TextValue13
    都将匹配
    [\w\d]+
    @Barmar。废话。完全忽略了这一点。对于两个输入'PrefApple'和'PrefOrangesValue2',match.groups()分别返回('Apple',None)和('OrangesValue2',None)。对于橘子,我期待('oranges','2'),第一组不能是非贪婪的,因为它会在第一组停止letter@user1514631. 正如我在回答中所解释的,非贪婪在这里没有帮助。
    re.compile(r'^Pref(\w+?)(?:Value(\d+))?$')