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
。