Подтвердить что ты не робот

Регулярное выражение для разделения строки и числа

У меня есть строка формы:

codename123

Есть ли регулярное выражение, которое можно использовать с Regex.Split(), чтобы разбить алфавитную часть и числовую часть на двухэлементную строку массив?

4b9b3361

Ответ 1

Я знаю, что вы попросили метод Split, но в качестве альтернативы вы могли бы использовать группы захваченных имен:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = numAlpha.Match("codename123");

var alpha = match.Groups["Alpha"].Value;
var num = match.Groups["Numeric"].Value;

Ответ 2

splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");

будет разделяться между буквой Unicode и цифрой Unicode.

Ответ 3

Regex для этого немного тяжело, если ваша строка всегда имеет такую ​​форму. Вы можете использовать

"codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'})

и два вызова подстроки.

Ответ 4

Немного подробный, но

Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );

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

Ответ 5

ИМО, было бы намного легче найти совпадения, например:

Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
     .Cast<Match>()
     .Select(m => m.Value)
     .ToArray();

а не использовать Regex.Split.

Ответ 6

Другим более простым способом является

string originalstring = "codename123";
string alphabets = string.empty;
string numbers = string.empty;

foreach (char item in mainstring)
{
   if (Char.IsLetter(item))
   alphabets += item;
   if (Char.IsNumber(item))
   numbers += item;
}

Ответ 7

Ну, это только одна строка: Regex.Split("codename123", "^([a-z]+)");