Регулярное выражение для разделения строки и числа - PullRequest
17 голосов
/ 15 сентября 2010

У меня есть строка вида:

codename123

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

Ответы [ 8 ]

45 голосов
/ 15 сентября 2010

Я знаю, что вы запросили метод 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;
8 голосов
/ 15 сентября 2010
splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");

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

6 голосов
/ 15 сентября 2010

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

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

и два вызова Substring.

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

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

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

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

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

Немного многословно, но

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

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

1 голос
/ 03 сентября 2015

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

1 голос
/ 09 июня 2014

Еще один более простой способ -

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;
}
0 голосов
/ 30 сентября 2018

этот код написан на Java / логика должна быть такой же в других местах

public String splitStringAndNumber(String string) {
    String pattern = "(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)";

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(string);
    if (m.find()) {
        return (m.group(1) + " " + m.group(2));
    }
    return "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...