1

我有一个带有两个命名部分和一个可选连字符分隔符的正则表达式。

^(?<Left>xxx)-?(?<Right>yyy)$
(我已经简化了实际的正则表达式。想象一下两个非常长且复杂的正则表达式,而不是“xxx”和“yyy”。)

但是,由于连字符是可选的,因此可以在输入字符串中将隐含的分隔符添加到不同的位置。有没有办法通过说 Left 或 Right 应该占据输入字符串的更大份额来解决歧义?

例如,对于可以拆分为“ABC”/“DEF”或“ABCDE”/“F”的输入“ABCDEF”,两者都是两个子正则表达式的有效匹配项。假设我更喜欢第二次拆分,因为我希望“左”占据最大的块,只要“右”留下有效的余数。

我正在使用.NET 的正则表达式库,但我希望有一种标准技术。

4

1 回答 1

2

正则表达式没有歧义,它会按照您的设计匹配。

您可以更改每个正则表达式中量词的匹配行为以更改结果。

默认情况下,它们都是贪婪的。您可以尽可能地改变这种匹配行为,通过在量词后添加问号来尽可能少地匹配,例如.+?

\(.*\)将匹配

(a)b(c)
^^^^^^^

虽然\(.*?\)会匹配

(a)b(c)
^^^ 
于 2012-02-22T11:12:25.590 回答