正确的匹配项在字符串中

时间:2019-02-01 13:56:03

标签: java regex

我正在读取一个文件,其中每一行都包含正确的匹配项,我只想提取数据。我使用以下正则表达式"\"ms_played\":\\s\"(\\d*)\""来获取"somedata", "ms_played": "0815", "somedata"

我尝试了多个正则表达式在线测试,但每个测试都找到一个匹配项,但我的代码却没有。

long timeplayed = 0;
Pattern endTimePattern = Pattern.compile("\"ms_played\":\\s\"(\\d*)\"");
try (BufferedReader br = new BufferedReader(new FileReader("EndSong_.json"))) {
      String line = null;
      br.readLine();
      while ((line = br.readLine()) != null) {
            String endtime = endTimePattern.matcher(line).group(1);
            timeplayed += Long.parseLong(endtime);
      }
}

我的预期结果是提取包含int值的匹配器组1。 我对Java端正则表达式比较陌生,如果有人可以帮助我将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的正则表达式确实在第一个捕获组中找到了数字。但是您必须在Matcher上运行find()。然后,您可以从中获取第一个捕获组。

例如:

long timeplayed = 0;
Pattern endTimePattern = Pattern.compile("\"ms_played\":\\s\"(\\d*)\"");
String line = "\"somedata\", \"ms_played\": \"0815\", \"somedata\"";
Matcher matcher = endTimePattern.matcher(line);
matcher.find();
timeplayed += Long.parseLong(matcher.group(1));
System.out.println(timeplayed); // 815

Exampe in Java | Regex