Как разбить строку на числа и ее подстроки? - PullRequest
3 голосов
/ 06 сентября 2010

Как разбить строку на числа и подстроки?

Ввод: 34AG34A
Ожидаемый результат: {"34","AG","34","A"}

Я пробовал с Regex.Split() функцией, но не могу понять, какой шаблон будет работать.

Есть идеи?

Ответы [ 4 ]

8 голосов
/ 06 сентября 2010

Регулярное выражение (\d+|[A-Za-z]+) вернет нужные вам группы.

4 голосов
/ 06 сентября 2010

Я думаю, вам нужно искать две модели:

  • последовательность цифр
  • последовательность букв

Следовательно, я бы использовал ([a-z]+)|([0-9]+).

Например, System.Text.RegularExpressions.Regex.Matches("asdf1234be56qq78", "([a-z]+)|([0-9]+)") возвращает 6 групп, содержащих «asdf», «1234», «be», «56», «qq», «78».

2 голосов
/ 06 сентября 2010

Сначала вы спрашиваете «цифры», но не указываете, что вы подразумеваете под этим.

Если вы имеете в виду «цифры в 0-9», то вам нужен класс символов [0-9]. Существует также класс символов \d, который в дополнение к 0-9 соответствует некоторым другим символам.

\ d соответствует любой десятичной цифре. Он эквивалентен шаблону регулярного выражения \ p {Nd}, который включает стандартные десятичные цифры 0-9, а также десятичные цифры ряда других наборов символов.

Я предполагаю, что вас не интересуют отрицательные числа, числа, содержащие десятичную точку, иностранные цифры, такие как 五 и т. Д.

Сплит не является правильным решением здесь. То, что вы хотите сделать, это маркировать строку, а не разбивать ее. Вы можете сделать это, используя Matches вместо Split:

string[] output = Regex.Matches(s, "[0-9]+|[^0-9]+")
    .Cast<Match>()
    .Select(match => match.Value)
    .ToArray();
1 голос
/ 06 сентября 2010

Не используйте Regex.Split, используйте Regex.Match:

var m = Regex.Match("34AG34A", "([0-9]+|[A-Z]+)");
while (m.Success) {
    Console.WriteLine(m);
    m = m.NextMatch();
}

Преобразование этого в массив оставлено читателю в качестве упражнения. : -)

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