我正在尝试从一行文本中解析双打。我发现几行代码我认为正在做我想要的。但是,我发现它不会解析负面的双打(只会将它们解析为正面)。我对正则表达式来说是全新的,它有点压倒性的。我想知道是否有人可以解释下面的代码并告诉我每个部分的含义,以及我将如何修改它以便解析正面和负面的双打?提前谢谢!
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。
答案 0 :(得分:2)
你的表达有两个部分。
括号中的第一部分是确保匹配的字符串前面没有数字 和点。如果你提供一个有用的样品线,不知道为什么你需要那个部分。
支架的第二部分是匹配部分。这只是说匹配1个或更多的数字和点。
如果您想让表达式与负数一起使用,您只需将“ - ”字符添加到匹配集即可。
(?!=\\d-\\.)([-\\d\\.]+)
但是,这个,以及你的表达式将匹配具有多个点(点)的字符串。例如122.12.12
所以我建议您尝试以下方法。请注意,我删除了第一部分。
(-?(\\d)+(\\.)?(\\d)*)
答案 1 :(得分:1)
尝试使用以下正则表达式:
(-?\\d+\\.\\d+)
答案 2 :(得分:0)
试试这个:
"((\\d+\\.?\\d*)|(\\.\\d+))(([Ee][+-]?)?\\d+)?"