通过regex Java从预测API中提取参数

时间:2016-03-01 04:16:33

标签: java regex api

我正在努力学习如何正确使用正则表达式,但我不确定我哪里出错了。我试图从forecast.io API中提取温度,最大温度,最小温度和图标。该图标似乎是导致问题的参数,因为当我删除它时,所有其他参数都能正常工作。对于图标,我想提取任何单词,包括破折号(即部分阴天,下雨,下雪,......)。 API中参数的出现顺序与正则表达式中调用它们的方式相匹配。

有问题的正则表达式

String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";

此处可以看到示例预测字符串:https://api.forecast.io/forecast/e7588e2bd6966bc7f41614e2955c5978/37.8267,-122.423

我正在使用的字符串进一步受限,因此只显示每个属性的第一个实例(即在示例中有多个" icon"的情况,在我将使用的字符串中将会只是一个例子。)

有人能告诉我这个表达有什么问题吗?

2 个答案:

答案 0 :(得分:0)

使用下面的正则表达式

String re = "\"(temperature|temperatureMin|temperatureMax)\":[0-9]+(\.)?[0-9]*|\"icon\":\"([a-zA-Z]|-)+\"";

下面
(。)表示出现0或1次 [0-9] +表示出现1个或多个数字
[0-9] *表示出现0或更多位数

答案 1 :(得分:0)

您忘了在图标上添加括号到正则表达式:

String re = ".*icon\":\"([\\-a-zA-Z]+)\",.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";

但我仍然建议使用Gson来解析Json:

JsonObject root = new JsonParser().parse(jsonStr).getAsJsonObject();
JsonArray dayArr = root.getAsJsonObject("daily").getAsJsonArray("data");
for (JsonElement elem : dayArr) {
    JsonObject elemObj = elem.getAsJsonObject();
    System.out.println(elemObj.getAsJsonPrimitive("icon") + "\t" +
            elemObj.getAsJsonPrimitive("temperatureMin") + "\t" +
            elemObj.getAsJsonPrimitive("temperatureMax"));
}