我有一个字符串,其中包含以下单词:
var a = "abc";
var a = "abc;";
var a = "abc; def";
var a = "abc def";
var a = "abc; def";
对于在所有这些情况下(包括终止符是句点或a-z和A-Z以外的任何其他字符)仅由“ abc”组成的新字符串,是否有人有任何建议?
答案 0 :(得分:2)
以下是两种解决方案:
带有正则表达式:
public static string GetLettersAtTheStart(string s) {
return Regex.Match(s, "^[a-zA-Z]+").Value;
}
此正则表达式与字符串开头的集合[a-zA-Z]
中的所有字符匹配。
和TakeWhile
:
public static string GetLettersAtTheStart(string s) {
return string.Join("", s.TakeWhile(char.IsLetter));
}
这基本上是说,从字母中取出字符串中的字符,然后将它们与空字符串连接起来。
用法:
GetLettersAtTheStart("abc; def") // "abc"
答案 1 :(得分:2)
几个例子:
// Using regex, assuming English alphabet and ASCII
var a = Regex.Split("abc;abc", "[^a-zA-Z]").First();
// Using System.Linq, preferable!
var b = string.Concat("abc abc".TakeWhile(c => char.IsLetter(c)));
答案 2 :(得分:1)
要在任何非字母字符后停止字符串,可以使用此功能。
public static string limitString(string text) {
string newString = "";
foreach (char character in text) {
if (Char.IsLetter(character)) {
newString += character;
} else {
break;
}
}
return newString;
}
用法示例:
limitString("abc; def");
将导致字符串abc
。
如果要在某些字符后停止字符串,则此功能应该起作用。
public static string limitString(string text, List<char> characters) {
foreach (char character in characters) {
text = text.Split(character)[0];
}
return text;
}
用法示例:
List<char> limChars = new List<char>() { ';' };
limitString("test;", limChars);
将产生字符串test
,您还可以通过在列表中添加更多项来限制一个以上的字符。
答案 3 :(得分:1)
一种简单的方法是使用正则表达式。您可以使用@"^[a-zA-Z]*"
来做到这一点。您的代码可能如下所示:
string getString(String str)
{
var regex = new Regex(@"^[a-zA-Z]*");
return regex.Match(str).Value;
}
您还可以迭代检查每个字符是否来自字母:
string getString2(String str)
{
string resultString = "";
foreach (char c in str)
{
if (Char.IsLetter(c))
resultString += c;
else
break;
}
return resultString;
}
答案 4 :(得分:1)
正如评论中提到的那样,您可以使用TakeWhile
。看起来像这样:
string.Concat(a.TakeWhile(char.IsLetter))
输出始终为:
abc