在下一个大写字母之前获取字符串(文本)

时间:2012-07-02 14:25:15

标签: c# .net string linq

我有以下内容:

string test = "CustomerNumber";

string test2 = "CustomerNumberHello";

结果应该是:

string result = "Customer";

字符串中的第一个单词是结果,第一个单词一直持续到第一个大写字母,这里是'N'

我已经尝试过这样的事情:

var result = string.Concat(s.Select(c => char.IsUpper(c) ? " " + c.ToString() : c.ToString()))
    .TrimStart();

但是没有成功,希望有人能给我一个小而干净的解决方案(没有RegEx)。

5 个答案:

答案 0 :(得分:10)

以下内容应该有效:

var result = new string(
    test.TakeWhile((c, index) => index == 0 || char.IsLower(c)).ToArray());

答案 1 :(得分:1)

您可以通过字符串查看哪些值(ASCII)低于97并删除结束。不是最漂亮或最LINQiest的方式,但它有效...

    string test2 = "CustomerNumberHello";

    for (int i = 1; i < test2.Length; i++)
    {
        if (test2[i] < 97)
        {
            test2 = test2.Remove(i, test2.Length - i);
            break;
        }
    }
    Console.WriteLine(test2); // Prints Customer

答案 2 :(得分:1)

试试这个

 private static string GetFirstWord(string source)
        {
            return source.Substring(0, source.IndexOfAny("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray(), 1));
        }

答案 3 :(得分:-3)

Z] [a-z] +正则表达式它将字符串拆分为以大字母开头的字符串她就是一个例子

  regex = "[A-Z][a-z]+";
            MatchCollection mc = Regex.Matches(richTextBox1.Text, regex);
            foreach (Match match in mc)
                if (!match.ToString().Equals(""))
                    Console.writln(match.ToString() + "\n");

答案 4 :(得分:-3)

我已经测试过,这有效:

string cust = "CustomerNumberHello";
string[] str = System.Text.RegularExpressions.Regex.Split(cust, @"[a-z]+");
string str2 = cust.Remove(cust.IndexOf(str[1], 1));