Быстрый способ разбить смешанную буквенно-цифровую строку на текстовые и числовые части? - PullRequest
2 голосов
/ 17 декабря 2011

Скажем, у меня есть строка, такая как

abc123def456

Какой лучший способ разбить строку на массив, такой как

["abc", "123", "def", "456"]

Ответы [ 5 ]

4 голосов
/ 17 декабря 2011
string input = "abc123def456";
Regex re = new Regex(@"\D+|\d+");
string[] result = re.Matches(input).OfType<Match>()
                    .Select(m => m.Value).ToArray();
3 голосов
/ 17 декабря 2011
string[] result = Regex.Split("abc123def456", "([0-9]+)");

Выше будет использоваться любая последовательность чисел в качестве разделителя, хотя завертывание его в () говорит о том, что мы все еще хотели бы сохранить наш разделитель в нашем возвращенном массиве.: В примере фрагмента мы получим пустой элемент в качестве последней записи нашего массива.

2 голосов
/ 17 декабря 2011

Границу, которую вы ищете, можно охарактеризовать как «Положение, в котором цифра следует за нецифровой цифрой или где цифра следует за цифрой»

Итак:

string[] result = Regex.Split("abc123def456", @"(?<=\D)(?=\d)|(?<=\d)(?=\D)");

Используйте [0-9] и [^0-9] соответственно, если \d и \D недостаточно конкретны.

1 голос
/ 17 декабря 2011

Добавьте пробел вокруг цифр, затем разделите их. Так что есть решение.

Regex.Replace("abc123def456", @"(\d+)", @" \1 ").Split(' ');

Я надеюсь, что это работает.

0 голосов
/ 17 декабря 2011

Вы можете преобразовать строку в массив символов, а затем перебрать символы. Пока символы одного типа (буквы или цифры), продолжайте добавлять их в строку. Когда следующий символ больше не относится к тому же типу (или вы достигли конца строки), добавьте временную строку в массив и сбросьте временную строку на ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...