шаблон регулярного выражения java соответствует и заменяет строку - PullRequest
1 голос
/ 08 октября 2019

Есть строка, если для этого шаблона необходимо вернуть только первые несколько символов.

String str = "PM 17/PM 19 - Test String"; 

ожидающая возвращаемая строка -> PM 17

Здесь мой шаблон строки проверяется на:

1) всегда начинается с PM
2), затем следует пробел (или некоторое время нулевой пробел)
3), затем следует некоторое число
4)затем следует косая черта (т. е. /)
5), затем следует та же строка PM
6), затем следует пробел (или некоторое время нулевой пробел)
7) Затем следует число
8) затем любые другие символы / строки.

Если данная строка совпадает с вышеуказанным шаблоном, мне нужно получить строку до косой черты (т. Е. PM 17 )

Я пробовал ниже путь, но он не работал длясостояние.

  if(str.matches("PM\\s+[0-9.]/PM(.*)")) { //"PM//s+[0-9]/PM(.*)"
                  str = str.substring(0, str.indexOf("/"));
                  flag = true;
  } 

1 Ответ

1 голос
/ 08 октября 2019

Вместо .matches вы можете использовать .replaceFirst здесь с группой захвата :

str = str.replaceFirst( "^(PM\\s*\\d+)/PM\\s*\\d+.*$", "$1" );
//=> PM 17

RegEx Demo

Подробности RegEx:

  • ^: начало строки
  • (PM\\s*\\d+): текст совпадения и группы, начинающийся с PM, за которым следует 0 или более пробелов, после которых следует пробел1 или более цифр
  • /PM\\s*\\d+: совпадение /PM с последующим 0 или более пробелами, за которыми следуют 1 или более цифр
  • .*$: сопоставление любого количества символов до конца строки
  • $1: это замена , которая помещает захваченную строку первой группы обратно в замену.

Если вы хотите выполнить проверку ввода перед извлечением подстрокитогда я предлагаю этот код:

final String regex = "(PM\\s*\\d+)/PM\\s*\\d+.*";    
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(str);

if (matcher.matches()) {
    flag = true;
    str = matcher.group(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...