Regex 在正则表达式模式中对管道/备选方案进行优先级排序

Regex 在正则表达式模式中对管道/备选方案进行优先级排序,regex,Regex,我正在扫描一个文本块并试图获取一个捕获组我正在调用值。问题可能出现在以下两种模式中: Value 2: X Value 1: Y ABC Value 2: X ABC 我总是喜欢值1。换句话说,当值1存在时,我想获取该值,而不是值2 我尝试过: (Value 1: (?<Value>.*?) ABC)|(Value 2: (?P<ValueAlt>.*?)) ABC (值1:(?*?)ABC)|(值2:(?P.*)ABC 换句话说,将第一个选项设为值2,但Regex

我正在扫描一个文本块并试图获取一个
捕获组
我正在调用
。问题可能出现在以下两种模式中:

Value 2: X Value 1: Y ABC
Value 2: X ABC
我总是喜欢
值1
。换句话说,当值1存在时,我想获取该值,而不是值2

我尝试过:

(Value 1: (?<Value>.*?) ABC)|(Value 2: (?P<ValueAlt>.*?)) ABC
(值1:(?*?)ABC)|(值2:(?P.*)ABC
换句话说,将第一个选项设为
值2
,但Regex更喜欢它为整个Regex找到的第一个匹配项,不管是否为管道

有没有办法告诉Regex更喜欢哪种管道

我的Regex101:

我总是喜欢值1。换句话说,当值1存在时,我想获取该值,而不是值2

您可以交替使用此原子组:

.*\b(?>Value 1: (?<Value1>\w+)|Value 2: (?<Value2>\w+))

我总是喜欢值1。换句话说,当值1存在时,我想获取该值,而不是值2

您可以交替使用此原子组:

.*\b(?>Value 1: (?<Value1>\w+)|Value 2: (?<Value2>\w+))

你用什么语言实现这个正则表达式?输入字符串中的值2总是在值1之前吗?你用什么语言实现这个正则表达式?输入字符串中的值2总是在值1之前吗?这不是问题的一部分,所以我会要求OP澄清。@mickmackusa:@anubhava值1(我想要的那个)当值1和值2都存在时,始终为秒。如果命名惯例混淆了这一事实,很抱歉。@anubhava是和否。我想我不够具体,以至于该模式实际上有一个巨大的随机文本块,现在我正在捕获所有这些,所以我需要调整它,否则,答案是肯定的。记住答案只能解决问题中描述的问题:)如果你有更复杂的问题,那么我也会解决它们。这不是问题的一部分,所以我会要求OP澄清。@mickmackusa:@anubhava值1(我想要的)总是第二个,当值1和值2都存在时。如果命名惯例混淆了这一事实,很抱歉。@anubhava是和否。我想我不够具体,以至于该模式实际上有一个巨大的随机文本块,现在我正在捕获所有这些,所以我需要调整它,记住答案只能解决问题中描述的问题:)若你们有更复杂的问题,那个么我也会解决它们。