Только с одним регулярным выражением, я не думаю, что это возможно. Но вы можете:
- сначала замените
(?<=(.))(?!\1)
пробелом;
- затем используйте строку append для добавления "##".
е
Pattern p = Pattern.compile("(?<=(.))(?!\\1)");
String ret = p.matcher(input).replaceAll(" ") + " ##";
Если вы имели в виду разделение всех групп, тогда отбросьте вторую операцию.
Объяснение: (?<=...)
- положительный взгляд сзади, а (?!...)
- отрицательный взгляд вперед. Здесь вы говорите, что хотите найти позицию, где позади находится один символ, который захвачен, и где тот же символ должен , а не следовать. И если так, замените пробелом. Lookaheads и lookbehind являются якорями, и, как и все якоря (включая ^
, $
, \A
и т. Д.), Они не потребляют символы, поэтому это работает.