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