如何将字符串限制为仅包含第一个单词或文本,但不包含第一个分号?

时间:2019-03-30 09:29:53

标签: c# string limit

我有一个字符串,其中包含以下单词:

var a = "abc";
var a = "abc;";
var a = "abc; def";
var a = "abc def";
var a = "abc; def";

对于在所有这些情况下(包括终止符是句点或a-z和A-Z以外的任何其他字符)仅由“ abc”组成的新字符串,是否有人有任何建议?

5 个答案:

答案 0 :(得分:2)

以下是两种解决方案:

  1. 带有正则表达式:

    public static string GetLettersAtTheStart(string s) {
        return Regex.Match(s, "^[a-zA-Z]+").Value;
    }
    

    此正则表达式与字符串开头的集合[a-zA-Z]中的所有字符匹配。

  2. 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