Подтвердить что ты не робот

Разделить регулярное выражение для извлечения строк непрерывных символов

Есть ли регулярное выражение, которое будет работать с 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() и других вызовов методов. Это не вопрос поиска кода, который "выполнит работу".

4b9b3361

Ответ 1

Полностью можно написать регулярное выражение для разделения в один шаг:

"(?<=(.))(?!\\1)"

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

Как вы можете видеть, регулярное выражение имеет нулевую ширину (только 2 взгляда вокруг утверждений). Никакой символ не потребляется регулярным выражением.