首页 文章

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

提问于
浏览
0

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

Problematic regex

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

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

    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"));
    }
    
  • 0

    使用波纹管正则表达式

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

    这里
    ( . )表示0或1次出现 .
    [0-9]表示一次或多次出现数字
    [0-9] *表示出现0或更多位数

相关问题