正则表达式后面的字符串

时间:2018-04-25 19:15:11

标签: java

我想在以下内容 "10-01-2018 10:24:08.006 : |=> [ DevStatusReq ] = 0x06"中的术语“[DevStatusReq] =”之后获取子字符串。我想使用正则表达式。 这是我的代码:

String margin = LogExtract.extractDataInFile(path, "Margin", "Margin = (.*?) dB");
String devStatusReq = LogExtract.extractDataInFile(path, "DevStatusReq", "[ DevStatusReq ] = (.*) ");
System.out.println("Margin : " + margin + " | DevStatusReq : " + devStatusReq );

我返回结果的方法是:

 public static String extractDataInFile(String filePath,String element, String filter) {
            String result = element + "has not been found ";
            try {
                BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    if(line.contains(element)) {
                        element = line;
                        Pattern pattern = Pattern.compile(filter);
                        Matcher matcher = pattern.matcher(line);
                        while (matcher.find()) {
                            result= matcher.group(1);
                        }
                    }
                }
                bufferedReader.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return result;
        }

控制台显示:

Margin : 39 | DevStatusReq : DevStatusReqhas not been found 

我在该方法的第二次调用中的正则表达式是错误的。你能帮我吗 ? 谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 正则表达式中 []是构建一组值的特殊字符:

    所以[ DevStatusReq ]表示以下字母DSR evtausq一个

    正确的模式是\[ DevStatusReq \] = (.*)

    1. Java中 \是一个特殊字符,所以你需要转义它,你的代码中的模式将是:

      LogExtract.extractDataInFile(path, "DevStatusReq", "\\[ DevStatusReq \\] = (.*) ");