正则表达式分割字符串和数字

时间:2010-09-15 17:08:35

标签: c# regex split

我有一个表格的字符串:

codename123

是否有一个可以与Regex.Split()一起使用的正则表达式将字母部分和数字部分分成两个元素的字符串数组?

8 个答案:

答案 0 :(得分:45)

我知道您要求使用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;

答案 1 :(得分:8)

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

将在Unicode字母和Unicode数字之间分开。

答案 2 :(得分:6)

如果你的字符串总是那种形式,那么正则表达式对此有点沉重。你可以用

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

和两次调用Substring。

答案 3 :(得分:4)

有点冗长,但

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

您能更具体地了解您的要求吗?也许还有一些其他的输入例子。

答案 4 :(得分:4)

IMO,找到匹配项会容易得多,例如:

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

而不是使用Regex.Split

答案 5 :(得分:1)

另一种更简单的方法是

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;
}

答案 6 :(得分:1)

嗯,仅限一行:Regex.Split("codename123", "^([a-z]+)");

答案 7 :(得分:0)

此代码用java / logic编写,在其他地方应该相同

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 "";
}