没有找到匹配的异常altough正确的匹配是String [复制]

问题描述 投票:1回答:1

这个问题已经在这里有一个答案:

我读一个文件,其中每行包含正确的比赛,我只是想提取数据。我用下面的正则表达式"\"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结束正则表达式,他很感激,如果有人可以提供帮助。

java regex
1个回答
3
投票

您正则表达式确实发现第一个捕获组的数字。但是你必须要对匹配器运行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

© www.soinside.com 2019 - 2024. All rights reserved.