Java регулярное выражение совпадает с пробельными и непробельными символами 2 раза - PullRequest
0 голосов
/ 07 апреля 2019

Это шаблон и строка, которую я использую для сопоставления с регулярным выражением Java. Мне нужно '/dev/sda6 72342MB 5013MB ' (т.е. без пробелов без пробелов без пробелов) в одной группе.

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 Ответ

1 голос
/ 07 апреля 2019

В вашем коде есть две проблемы.

  • Вам нужно всегда вызывать matches() или find() перед вызовом .group() методов для объекта соответствия.
  • SecondВаше регулярное выражение неправильно сгруппировано.

В настоящее время ваша группа будет давать только одно / последнее совпадение, поэтому вместо этого вам нужно заключить все выражение в группу.Правильное регулярное выражение, которое вам нужно, это,

.*\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));
}

Prints,

/dev/sda6         72342MB 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...