Подтвердить что ты не робот

Как получить все слова строки в С#?

У меня есть абзац в одной строке, и я хотел бы получить все слова в этом параграфе.

Моя проблема в том, что я не хочу, чтобы слова суффиксов заканчивались знаками пунктуации, такими как (',', '.', '' ',' '', ';', ':', '!', '?') и /n/t и т.д.

Мне также не нужны слова с и m, такие как world's, где он должен возвращать только мир.

В примере he said. "My dog bone, toy, are missing!"

список должен быть: he said my dog bone toy are missing

4b9b3361

Ответ 1

Развернувшись на Ответ Шаня, я бы рассмотрел что-то вроде этого как отправную точку:

MatchCollection matches = Regex.Match(input, @"\b[\w']*\b");

Зачем включать символ '? Потому что это предотвратит разделение слов "мы" на два слова. После его захвата вы можете вручную вычеркнуть суффикс самостоятельно (в противном случае вы не могли бы признать, что re не является словом и игнорирует его).

Итак:

static string[] GetWords(string input)
{
    MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b");

    var words = from m in matches.Cast<Match>()
                where !string.IsNullOrEmpty(m.Value)
                select TrimSuffix(m.Value);

    return words.ToArray();
}

static string TrimSuffix(string word)
{
    int apostropheLocation = word.IndexOf('\'');
    if (apostropheLocation != -1)
    {
        word = word.Substring(0, apostropheLocation);
    }

    return word;
}

Пример ввода:

he said. "My dog bone, toy, are missing!" What're you doing tonight, by the way?

Пример вывода:

[he, said, My, dog, bone, toy, are, missing, What, you, doing, tonight, by, the, way]

Одним из ограничений этого подхода является то, что он не будет обрабатывать аббревиатуры хорошо; например, "Y.M.C.A." будет рассматриваться как четыре слова. Я думаю, что это также можно было бы включить, включив . в качестве символа, который будет соответствовать слову, а затем удалит его, если он будет полностью остановлен после этого (то есть, проверив, что это единственный период в слове, а также последний символ).

Ответ 2

Надеюсь, это вам полезно:

        string[] separators = new string[] {",", ".", "!", "\'", " ", "\'s"};
        string text = "My dog bone, toy, are missing!";

        foreach (string word in text.Split(separators, StringSplitOptions.RemoveEmptyEntries))
            Console.WriteLine(word);

Ответ 4

разделить на пробелы, обрезать все, что не является буквой в результирующих строках.

Ответ 5

Здесь метод замены цикла... не быстрый, а способ его решения...

string result = "string to cut ' stuff. ! out of";

".',[email protected]".ToCharArray().ToList().ForEach(a => result = result.Replace(a.ToString(),""));

Предполагается, что вы хотите поместить его обратно в исходную строку, а не в новую строку или список.