如何在C#中只从字符串中获取第一个字母

时间:2017-07-15 08:39:55

标签: c#

我是C#的新手,我正在使用Windows窗体。 我正在处理Postcodes字符串,我试图从Post代码中获取第一个字母并将其存储在变量中,例如:

BL9 8NS(我想获得BL)

L8 6HN(我想得到L)

CH43 7TA(我想得到CH)

WA8 7LX(我想要WA)

我只想获得数字前面的第一个字母,你可以看到字母数可以是1或2,也许是3。 谁知道怎么做?谢谢

6 个答案:

答案 0 :(得分:16)

stringIEnumerable<char>以来,使用Linq TakeWhilechar.IsLetter非常简单:

string firstLetters = string.Concat(str.TakeWhile(char.IsLetter));

答案 1 :(得分:5)

使用带有组的正则表达式匹配前面的字母。

这是你需要的正则表达式:

^([a-zA-Z]+)

你可以像这样使用它:

Regex.Match("BL9 8NS", "^([a-zA-Z]+)").Groups[1].Value

上述表达式将评估为&#34; BL&#34;。

请记住向System.Text.RegularExpressions添加using指令!

答案 2 :(得分:2)

您可以使用StringBuilder并循环显示字符,直到第一个非字母。

string text = "BL9 8NS";
StringBuilder sb = new StringBuilder();
foreach(char c in text) {
    if(!char.IsLetter(c)) {
        break;
    }
    sb.Append(c);
}
string result = sb.ToString(); // BL

或者,如果您不关心性能并且只是想要简单,那么您可以使用TakeWhile

string result = new string(text.TakeWhile(c => char.IsLetter(c)).ToArray());

答案 3 :(得分:1)

怎么样?
string result = postcode.Substring(0, postcode.IndexOf(postcode.First(Char.IsDigit)));

如果您的邮政编码始终包含该数字,First不会抛出任何异常。

答案 4 :(得分:0)

char[] numbers = new char[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

string a = "BL9 8NS";
string result = a.Substring( 0, a.IndexOfAny(numbers) );
Console.WriteLine( result );

答案 5 :(得分:0)

虽然Ofir Winegarten的答案真的很棒,但我还是选了它,我想分享我在突然断电前写的答案!

string code = "BL9 8NS";
string myStr = "";
for (int i = 0; i < code.Length; i++)
  {
     if (char.IsNumber(code[i]))
         break;
     else
         myStr += code[i];
  }