Шаблон не обеспечивает ожидаемый результат

1

У меня есть следующий код:

Pattern pattern = Pattern.compile("\\d*\\s*[-\\+\\*/\\$£]");

String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
List<String> output = new ArrayList<>();
while (matcher.find()) {
    output.add(matcher.group());
}


for(String s : output){
    System.out.println(s);
}

Мне очень понравился вывод в моем списке:

3 3 *
4 +
2 /

Увы, мой фактический результат:

3 *
4 +
2 /

Я уверен, что есть мастер регулярных выражений, который может показать мне проблему :)

  • 0
    потому что первые 3 не сопровождаются несловесным символом.
  • 0
    между 3 и 3 есть место
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Поскольку между двумя цифрами существует пробел, вам нужно добавить шаблон, чтобы он соответствовал второй цифре, и сделать его необязательным. А также я предлагаю вам использовать \d+ вместо \d* потому что \d* также соответствует пустой строке.

Pattern pattern = Pattern.compile("\\d+(\\s\\d+)?\\s*[-+*/$£]");

String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
ArrayList<String> output = new ArrayList<String>();
while (matcher.find()) {
    output.add(matcher.group());
}


for(String s : output){
    System.out.println(s);
}

Вывод:

3 3 *
4 +
2 /
  • 0
    Спасибо, это работает, я приму этот ответ
  • 0
    Другой вопрос, если я могу, если бы у меня был вход 3 3 3 * 4 + 2 / как бы я получил выход 3 3 3 * вместо 3 3 *, я извиняюсь, но регулярное выражение никогда не было моей выгодой.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню