在Java中的文件中查找模式

时间:2018-07-31 15:52:55

标签: java regex

我找到一个文件

a%2==0

我想返回name="john" 。我尝试过以下操作:

john

在这里,我不知道如何继续,如何退还?我已经阅读了问题here,但无法解决该问题。

2 个答案:

答案 0 :(得分:3)

您当前的模式不正确,它在文件使用'时期望"。您可能想进一步改善模式,但是整个问题可以通过流来解决:

Pattern pattern = Pattern.compile("name=\"(.+)\"");
try (BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"))) {
  return reader.lines()
      .map(pattern::matcher)
      .filter(Matcher::matches)
      .map(m -> m.group(1))
      .findFirst()
      .orElseThrow(IllegalArgumentException::new);
}

答案 1 :(得分:1)

您需要做的是使用正则表达式中匹配的group 1: 您可以按照以下步骤进行操作:

matcher.group(1)

工作示例:

List<String> list = new ArrayList<>();
list.add("name=\"john\"");
for(String str:list){
        Pattern pattern = Pattern.compile("name=\"([^']*)\"");
        Matcher matcher = pattern.matcher(str);
        if(matcher.matches())
            System.out.println(matcher.group(1)); // having the value john
    }

Jshell输出:

jshell> for(String str:list){
   ...>         Pattern pattern = Pattern.compile("name=\"([^']*)\"");
   ...>         Matcher matcher = pattern.matcher(str);
   ...>         if(matcher.matches())
   ...>             System.out.println(matcher.group(1));
   ...>     }

   john