C# 正则表达式。按加号和减号拆分

C# 正则表达式。按加号和减号拆分,c#,regex,C#,Regex,我有一个字符串1.5(+1.2/-0.5)。我想使用Regex来提取数值:{1.5,1.2,0.5} 我的计划是用(,+,/和-拆分字符串。当我用(和/拆分字符串时,它可以拆分,但如果我同时添加+和-,则程序崩溃 string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/)])"); // OK string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/+-)])"); // Exception

我有一个字符串
1.5(+1.2/-0.5)
。我想使用Regex来提取数值:
{1.5,1.2,0.5}

我的计划是用
+
/
-
拆分字符串。当我用
/
拆分字符串时,它可以拆分,但如果我同时添加
+
-
,则程序崩溃

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:正在分析中的“(?=[(/+-)])”-[x-y]范围 逆序


破折号在regexp的方括号内是一个特殊字符。它表示一个范围:
[a-z]
表示从
a
z
的任何字符。当您编写
[(/+-)]
时,它实际上意味着
,或从
+
的任何字符)
。错误源于以下事实:在ASCII排序中,
位于
+
之前,因此字符范围
[+-)]
无效

若要解决此问题,括号中的破折号必须始终位于第一位或最后一位,否则需要反斜杠


我同意,我可能会用一个全局regexp来挑选
[0-9.]+
,而不是用一个分割来切割其他所有东西。

试图避开像+


为什么不像
/\d+\?\d+/
这样的正则表达式呢?这不会分割它,但会返回数字。

就像我说的-它不是用于分割,而是用于匹配。什么意思,省略数值?它显示(+、/-和)。我想我需要的恰恰相反。但我很难理解正则表达式。目前我使用@“(?=[(\/\+\-)])”,将字符串拆分为6段,仍然有效。但是如果只通过“global regexp”提取数字就比较理想了,我的意思是使用而不是
Regex.Split