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