与正则表达式分裂

时间:2011-01-11 09:23:57

标签: c# regex

我想将类似于abc123abcdefgh12a123456的字符串拆分为字母和数字,以便结果为{"abc", "123"}等。

在C#4.0中最简单的方法是什么?我想用一个正则表达式来做。

6 个答案:

答案 0 :(得分:1)

为何选择正则表达式?

    static readonly char[] digits = {'0','1','2','3','4','5','6','7','8','9'};
    ....
    string s = "abcdefgh12", x = s, y = "";
    int i = s.IndexOfAny(digits);
    if (i >= 0) {
        x = s.Substring(0, i);
        y = s.Substring(i, s.Length - i);
    }

答案 1 :(得分:1)

“只有数字或仅字母”可以使用[a-zA-Z]*|[0-9]*来表示。您所要做的就是在字符串中查找该正则表达式的所有匹配项。请注意,不会返回非字母数字字符,但仍会拆分字符串(因此"123-456"会产生{ "123", "456"})。

编辑:我已将您的问题解释为声明您的字符串可以是任意顺序的字母和数字序列 - 如果您的字符串只是一个或多个字母后跟一个或多个数字,不需要正则表达式:查找第一个数字并拆分字符串。

答案 2 :(得分:1)

除了Marc Gravell,请阅读http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html

  

在C#4.0中最简单的方法是什么?我想用一个正则表达式来做。

在你的情况下,这实际上是矛盾的。按固定模式分割的最简单方法不是使用正则表达式。

答案 3 :(得分:1)

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

Regular expression to split string and number

答案 4 :(得分:1)

除非我遗漏了某些东西,否则这应该可以解决问题... ([a-z]*)([0-9]*)

答案 5 :(得分:-1)

您可以为字母创建一个组,为数字创建一个组。 使用本指南获取更多信息:http://www.regular-expressions.info/reference.html HTP>