#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)
найдет позицию, в которой впереди есть цифра, но за этой позицией нет цифры.