0

我正在尝试从一行文本中解析双打。我发现了几行我认为正在做我想做的事情的代码。但是,我发现它不会解析负双打(只会将它们解析为正)。我对正则表达式完全陌生,它有点压倒性。我想知道是否有人可以解释下面的代码并告诉我每个部分的含义,以及我将如何修改它以便解析正负双打?提前致谢!

double nextDouble;
Matcher matcher = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)").matcher(line);
if (matcher.find()) nextDouble = Double.parseDouble(matcher.group(1)));

编辑:这是一条线的示例。“104.44518717、34.09785265、103.39288764、0.09813121、0.00000000、-0.46612322、4.68576504”

它将 -0.46612322 解析为 0.46612322。

4

3 回答 3

2

你的表达有两个部分。

括号中的第一部分是确保匹配的字符串前面没有数字和点。如果您提供有帮助的示例行,则不确定您为什么需要该部分。

括号中的第二部分是匹配部分。那只是说匹配1个或多个数字和点。

如果您想让您的表达式使用负数,您只需将“-”字符添加到匹配集中即可。

(?!=\\d-\\.)([-\\d\\.]+) 

但这以及您的表达式将匹配具有多个点(点)的字符串。例如 122.12.12

所以我建议你尝试以下方法。请注意,我删除了第一部分。

(-?(\\d)+(\\.)?(\\d)*)
于 2013-01-17T13:47:16.740 回答
1

尝试使用以下正则表达式:

(-?\\d+\\.\\d+)
于 2013-01-17T13:28:37.673 回答
0

试试这个:

"((\\d+\\.?\\d*)|(\\.\\d+))(([Ee][+-]?)?\\d+)?"
于 2015-11-23T11:12:33.627 回答