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]
表示从a
到z
任何字符。 当你写[(/+-)]
,它实际上意味着(
或者来自+
任何字符)
。 该错误来自于在ASCII排序中出现在+
之前的事实,因此字符范围[+-)]
无效。
要解决这个问题,在括号中,破折号必须始终排在第一位或最后一位,否则它必须被反斜杠。
我同意,我可能会使用全局正则表达式来挑选[0-9.]+
,而不是拆分其他所有内容。
试图逃避像+的迹象?
为什么RegEx不像/\d+\.?\d+/
? 这不会拆分它但会返回数字。