Как я могу ограничить строку только первым словом или положительным текстом, не включая первую точку с запятой? - PullRequest
3 голосов
/ 30 марта 2019

У меня есть строка , которая содержит такие слова:

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

Есть ли у кого-нибудь предложения о том, как я мог бы создать новую строку, которая во всех этих случаях (в том числе, если символ завершения был точкой или чем-то иным, кроме a-z и A-Z), состояла бы только из "abc"?

Ответы [ 5 ]

2 голосов
/ 30 марта 2019

Несколько примеров:

// 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 голосов
/ 30 марта 2019

Вот два решения:

  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 голос
/ 30 марта 2019

Как уже упоминалось в комментариях, вы можете использовать TakeWhile.Это будет выглядеть так:

string.Concat(a.TakeWhile(char.IsLetter))

вывод всегда будет:

abc
1 голос
/ 30 марта 2019

Один простой способ - использовать регулярные выражения.Вы можете сделать это с @"^[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;
}
1 голос
/ 30 марта 2019

Чтобы остановить строку после любого не буквенного символа, вы можете использовать эту функцию.

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, вы также можете ограничить более одного символа, добавив больше элементов в список.

...