Регулярное выражение для разделения строки и числа
У меня есть строка формы:
codename123
Есть ли регулярное выражение, которое можно использовать с Regex.Split()
, чтобы разбить алфавитную часть и числовую часть на двухэлементную строку массив?
Ответы
Ответ 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]+)");