如何将字符串限制为仅第一个单词或不包括第一个分号的乐观文本?
How can I limit a string to just the first word or the text upbeat not including the first semicolon?
我有一个 字符串,其中包含如下字词:
var a = "abc";
var a = "abc;";
var a = "abc; def";
var a = "abc def";
var a = "abc; def";
有没有人对我如何创建一个新字符串有任何建议,在所有这些情况下(包括如果终止字符是句点或 a-z 和 A-Z 以外的任何字符),仅包含 "abc" ?
要在任何非字母字符后停止字符串,您可以使用此函数。
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
,您还可以通过向列表中添加更多项来限制一个以上的字符。
这里有两个解决方案:
用正则表达式:
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"
一种简单的方法是使用正则表达式。您可以使用 @"^[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;
}
几个例子:
// 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)));
正如评论中提到的,您可以使用 TakeWhile
。它看起来像这样:
string.Concat(a.TakeWhile(char.IsLetter))
输出总是:
abc
我有一个 字符串,其中包含如下字词:
var a = "abc";
var a = "abc;";
var a = "abc; def";
var a = "abc def";
var a = "abc; def";
有没有人对我如何创建一个新字符串有任何建议,在所有这些情况下(包括如果终止字符是句点或 a-z 和 A-Z 以外的任何字符),仅包含 "abc" ?
要在任何非字母字符后停止字符串,您可以使用此函数。
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
,您还可以通过向列表中添加更多项来限制一个以上的字符。
这里有两个解决方案:
用正则表达式:
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"
一种简单的方法是使用正则表达式。您可以使用 @"^[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;
}
几个例子:
// 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)));
正如评论中提到的,您可以使用 TakeWhile
。它看起来像这样:
string.Concat(a.TakeWhile(char.IsLetter))
输出总是:
abc