尝试使用正则表达式从字符串"-a 1 -b -5.1"
中解析参数。
输出应具有2个带有值的标志:标志a
和值1
,b
和-5.1
。
当我尝试(-(?<flag>[a-zA-Z])(?<value> .+)?(?!-[a-zA-Z]))*
正则表达式时,它仅返回值为a
的标志1 -b -5.1
。
为什么它不停在-b
?
答案 0 :(得分:4)
您需要使(?<value> .+)
变得懒惰,并将负面的前瞻转变为正面的前瞻。
这是我的尝试:
-(?<flag>[a-zA-Z]) (?<value>.+?)(?=$| -[a-zA-Z])
说明:
您可能想知道为什么使用正向提前而不是负向提前。这是因为+?
将在匹配后的任何事物停止匹配。这就是为什么我们期待找到$| -[a-zA-Z]
的原因,如果我们找到了+?
,则停止匹配!
我也将空格字符移到了value
组之外。我假设您不希望该值包含空格?