Regex разделяет числа и буквенные группы без пробелов

Если у меня есть строка типа "11E12C108N" что представляет собой объединение буквенных групп и групп цифр, как разделить их без пробела между ними?

Например, я хочу, чтобы результирующее разделение было:

tokens[0] = "11"
tokens[1] = "E"
tokens[2] = "12"
tokens[3] = "C"
tokens[4] = "108"
tokens[5] = "N"

У меня есть это прямо сейчас.

public static void main(String[] args) {

    String stringToSplit = "11E12C108N";

    Pattern pattern = Pattern.compile("\\d+\\D+");
    Matcher matcher = pattern.matcher(stringToSplit);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

Что дает мне:

11E
12C
108N

Могу ли я сделать оригинальное регулярное выражение сделать полный раскол за один раз? Вместо того, чтобы снова запускать регулярное выражение на промежуточных токенах?

Ответы на вопрос(2)

осмотреться" в регулярном выражении split

String stringToSplit = "11E12C108N";
String[] tokens = stringToSplit .split("(?<=\\d)(?=\\D)|(?=\\d)(?<=\\D)");
System.out.println(Arrays.toString(tokens));

вне[11, E, 12, C, 108, N]

Идея разделить в местах, которые находятся между цифрами \d) и не цифры \D). Другими словами, это место (пустая строка), которое имеет:

цифра до(?<=\d) и не цифра после него(?=\D) без цифры до(?<=\D) и цифра после него(?=\d)

Больше информации о(?<=..) а также(?=..) (и еще немного) вы можете найти наhttp: //www.regular-expressions.info/lookaround.htm

Решение Вопроса

адений. Это будет то, что вы ищете.

\d+|\D+

В Java я думаю, что код будет выглядеть примерно так:

Matcher matcher = Pattern.compile("\\d+|\\D+").matcher(theString);
while (matcher.find())
{
    // append matcher.group() to your list
}

Ваш ответ на вопрос