通过regexjava从预测API中提取参数
我正在努力学习如何正确使用正则表达式,但不确定哪里出了问题。我正在尝试从forecast.io API中提取温度、最高温度、最低温度和图标。图标似乎是导致问题的参数,因为当我删除它时,所有其他参数都能完美工作。对于图标,我想提取任何单词,包括破折号(即部分多云的夜晚、雨、雪等)。API中参数的出现顺序与正则表达式中调用它们的方式相匹配 有问题的正则表达式:通过regexjava从预测API中提取参数,java,regex,api,Java,Regex,Api,我正在努力学习如何正确使用正则表达式,但不确定哪里出了问题。我正在尝试从forecast.io API中提取温度、最高温度、最低温度和图标。图标似乎是导致问题的参数,因为当我删除它时,所有其他参数都能完美工作。对于图标,我想提取任何单词,包括破折号(即部分多云的夜晚、雨、雪等)。API中参数的出现顺序与正则表达式中调用它们的方式相匹配 有问题的正则表达式: String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*
String re = ".*icon\":([\\-a-zA-Z]+),.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";
此处可以看到一个预测字符串示例:
我正在使用的字符串被进一步限制,因此仅显示每个属性的第一个实例(即,在示例中有多个“图标”的情况,在我将使用的字符串中,只有一个实例。)
谁能告诉我这个表达式有什么问题吗?使用下面的正则表达式
String re = "\"(temperature|temperatureMin|temperatureMax)\":[0-9]+(\.)?[0-9]*|\"icon\":\"([a-zA-Z]|-)+\"";
这里(.)表示0或1次出现。
[0-9]+表示出现一个或多个数字
[0-9]*表示0个或更多数字出现您忘记在regexp的图标周围添加括号:
String re = ".*icon\":\"([\\-a-zA-Z]+)\",.*temperature\":([\\-0-9\\.]+),.*temperatureMin\":([\\-0-9\\.]+),.*temperatureMax\":([\\-0-9\\.]+),.*";
但我仍然建议使用以下方法解析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"));
}
我们需要测试regexp的精确文本。这看起来很混乱。列出实际字符串和匹配规则。可能它不是文本的第一行?尝试用
“(?s)替换”*“icon
。*icon
您的字符串是有效的json,因此您可以使用类似的方法来解析它。这不起作用,因为我还需要能够捕获负温度(“-”文字)。同样,温度块工作正常,它只是一个图标,我有问题。你的建议,增加括号工作。非常感谢你!几天来,我一直在努力让它发挥作用。