负向超前行为不符合预期

时间:2018-09-03 09:49:37

标签: c# regex regex-lookarounds

尝试使用正则表达式从字符串"-a 1 -b -5.1"中解析参数。

输出应具有2个带有值的标志:标志a和值1b-5.1

当我尝试(-(?<flag>[a-zA-Z])(?<value> .+)?(?!-[a-zA-Z]))*正则表达式时,它仅返回值为a的标志1 -b -5.1

为什么它不停在-b

1 个答案:

答案 0 :(得分:4)

您需要使(?<value> .+)变得懒惰,并将负面的前瞻转变为正面的前瞻。

这是我的尝试:

-(?<flag>[a-zA-Z]) (?<value>.+?)(?=$| -[a-zA-Z])

Demo

说明:

您可能想知道为什么使用正向提前而不是负向提前。这是因为+?将在匹配后的任何事物停止匹配。这就是为什么我们期待找到$| -[a-zA-Z]的原因,如果我们找到了+?,则停止匹配!

我也将空格字符移到了value组之外。我假设您不希望该值包含空格?