Regex.Split加号和减号

我有一个字符串1.5(+1.2/-0.5) 。 我想用正则表达式提取数值: {1.5, 1.2, 0.5}

我的计划是用(+/- 。)拆分字符串。当我拆分时(/ ,它拆分OK,但是如果我也加上+- ,那么程序崩溃。

 string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/)])"); // OK string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/+-)])"); // Exception catched 

被捕获的例外是:

System.ArgumentException:以相反的顺序解析“(?= [(/ + – )])” – [xy]范围

在正则表达式的方括号内,破折号是一个特殊字符。 它表示范围: [az]表示从az任何字符。 当你写[(/+-)] ,它实际上意味着(或者来自+任何字符) 。 该错误来自于在ASCII排序中出现在+之前的事实,因此字符范围[+-)]无效。

要解决这个问题,在括号中,破折号必须始终排在第一位或最后一位,否则它必须被反斜杠。

我同意,我可能会使用全局正则表达式来挑选[0-9.]+ ,而不是拆分其他所有内容。

试图逃避像+的迹象?

为什么RegEx不像/\d+\.?\d+/ ? 这不会拆分它但会返回数字。