我是C#的新手,我正在使用Windows窗体。 我正在处理Postcodes字符串,我试图从Post代码中获取第一个字母并将其存储在变量中,例如:
BL9 8NS(我想获得BL)
L8 6HN(我想得到L)
CH43 7TA(我想得到CH)
WA8 7LX(我想要WA)
我只想获得数字前面的第一个字母,你可以看到字母数可以是1或2,也许是3。 谁知道怎么做?谢谢
答案 0 :(得分:16)
自string
个IEnumerable<char>
以来,使用Linq TakeWhile
和char.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];
}