A подход позволяет использовать здесь гораздо более простое регулярное выражение:
String text = "12 + (ab-bc*3)";
List<String> results = Pattern.compile("\\p{Punct}|\\w+").matcher(text)
.results()
.map(MatchResult::group)
.collect(Collectors.toList());
System.out.println(results);
// => "12", "+", "(", "ab", "-", "bc", "*", "3", ")"
См. Java demo .
Регулярное выражение соответствует
\p{Punct}
- знаки препинания и символы |
- или \w+
- 1+ буквы, цифры или_
символов.
См. Демонстрационный пример регулярных выражений (преобразован в PCRE для демонстрационной цели).