Java正则表达式匹配两次匹配空白字符和非空白字符

时间:2019-04-07 05:36:21

标签: java regex

这是我用于Java正则表达式匹配的模式和字符串。 我需要'/dev/sda6 72342MB 5013MB '(即,非空格非whitespce空格非空格) 在一个小组中。

String pattern = ".*\n(\\S+\\s+){2}(.*)";
String str = "Filesystem     1MB-blocks   Used Available Use% Mounted on\n" +
              "/dev/sda6         72342MB 5013MB   63655MB   8% /common";
Pattern r = Pattern.compile(pattern,  Pattern.DOTALL);
Matcher m = r.matcher(str);
System.out.println(m.group(1));

但是它没有达到预期。 匹配

  

72342MB

代替

  

/ dev / sda6 72342MB

谁能告诉我我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

您的代码中有两个问题。

  • 在匹配器对象上调用matches()方法之前,您需要始终调用find().group()
  • 第二个您的正则表达式分组错误。

当前,您的小组只会给出一个/最后一场比赛,因此您需要将整个表达式包装成小组。您需要的正确正则表达式是这个

.*\n((?:\\S+\\s+){2})(.*)

尝试此Java代码,

String pattern = ".*\n((?:\\S+\\s+){2})(.*)";
String str = "Filesystem     1MB-blocks   Used Available Use% Mounted on\n" +
              "/dev/sda6         72342MB 5013MB   63655MB   8% /common";
Pattern r = Pattern.compile(pattern,  Pattern.DOTALL);
Matcher m = r.matcher(str);
if (m.matches()) {
    System.out.println(m.group(1));
}

打印

/dev/sda6         72342MB