3

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

我的计划是用(,+/分割字符串-。当我使用 and 进行拆分时(/它可以拆分,但是如果我还添加了+and -,那么程序就会崩溃。

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] 范围以相反的顺序

4

2 回答 2

8

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

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

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

于 2012-05-11T08:18:29.427 回答
2

试图逃避像 + 这样的符号?

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

于 2012-05-11T08:20:03.557 回答