Разделить регулярное выражение для извлечения строк непрерывных символов
Есть ли регулярное выражение, которое будет работать с String.split()
, чтобы разбить String на смежные символы - т.е. разделить, где следующий символ отличается от предыдущего символа?
Здесь тестовый пример:
String regex = "your answer here";
String[] parts = "aaabbcddeee".split(regex);
System.out.println(Arrays.toString(parts));
Ожидаемый результат:
[aaa, bb, c, dd, eee]
Хотя тестовый пример имеет буквы только как входные данные, это только для ясности; входные символы могут быть любыми символами.
Пожалуйста, не предоставляйте "work-arounds" с использованием циклов или других методов.
Вопрос заключается в том, чтобы найти правильное регулярное выражение для кода, как показано выше, т.е. только с использованием split()
и других вызовов методов. Это не вопрос поиска кода, который "выполнит работу".
Ответы
Ответ 1
Полностью можно написать регулярное выражение для разделения в один шаг:
"(?<=(.))(?!\\1)"
Поскольку вы хотите разделить между каждой группой одинаковых символов, нам просто нужно искать границу между двумя группами. Я достигаю этого, используя положительный внешний вид только для того, чтобы захватить предыдущий символ и использовать отрицательный внешний вид вперед и обратную ссылку, чтобы проверить, что следующий символ не является одним и тем же символом.
Как вы можете видеть, регулярное выражение имеет нулевую ширину (только 2 взгляда вокруг утверждений). Никакой символ не потребляется регулярным выражением.