Regex.Split加号和减号

时间:2012-05-11 08:15:54

标签: c# regex

我有一个字符串1.5(+1.2/-0.5)。我想使用正则表达式来提取数值:{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]范围   逆序

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

试图逃避像+?

这样的迹象

为什么不像/\d+\.?\d+/这样的RegEx?这不会拆分,而是返回数字。