Разделение текста в регистре верблюда с числовыми группами

#java #regex #split #numbers #camelcasing

#java #регулярное выражение #разделение #числа #camelcasing

Вопрос:

У меня есть строки, содержащие текст в регистре верблюда и цифры, и я хотел бы разделить его.

Например, строка "abcDefGhi345J6" должна быть разделена на

 ["abc", "Def", "Ghi", "345", "J", "6"]
 

Мои лучшие усилия

 "abcDefGhi345J6".split("(?=\p{Lu})|(?!\p{Lu})(?=\d )")
 

что дает мне

 ["abc", "Def", "Ghi", "3", "4", "5", "J", "6"]
 

PS: Ответы с пометкой Dupe НЕ дают ожидаемого результата, поскольку они не зависят от Unicode.

Комментарии:

1. (?<=P{Lu})(?=p{Lu})|(?<=p{L})(?=d) .

2. Спасибо за быстрый ответ. Я приму anser от anubhava, потому что он короче.

Ответ №1:

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

 (?=p{Lu})|(?<!d)(?=d)
 

Демонстрация регулярных выражений

Для кода Java:

 String[] arr = string.split("(?=\p{Lu})|(?<!\d)(?=\d)");
 

(?<!d)(?=d) найдет позицию, в которой впереди есть цифра, но за этой позицией нет цифры.