Разделить текст на предложения в C#

Я хочу разделить текст на предложения. Предложение заканчивается на (точка) или ? или ! затем следует один или несколько пробелов, а следующее предложение начинается с заглавной буквы.

например:

первое предложение. Второе предложение!

Как я могу это сделать?

4 ответов


какие языки вы хотите поддержать? Например, в тайском языке нет пробелов между словами, а предложения разделены пробелами. Так что, в целом, эта задача очень сложная. Также рассмотрим полезный комментарий Фредрика Мерка.

Итак, сначала вам нужно определить набор правил о том, что такое" предложение". Тогда вы можете использовать одно из предложенных решений.


вы можете разделить регулярное выражение, которое соответствует пробелу, с помощью lookbehind, который ищет Терминаторы предложений:

string[] sentences = Regex.Split(input, @"(?<=[\.!\?])\s+");

это разделится на символы пробела и сохранить Терминаторы в предложениях.

пример:

string input = "First sentence. Second sentence! Third sentence? Yes.";
string[] sentences = Regex.Split(input, @"(?<=[\.!\?])\s+");

foreach (string sentence in sentences) {
  Console.WriteLine(sentence);
}

выход:

First sentence.
Second sentence!
Third sentence?
Yes.

ты пробовал String.Split()? См. документы об этом здесь


попробуйте это (MSDN)

char[] separators = new char[] {'!', '.', '?'};
string[] sentences1 = "First sentence. Second sentence!".Split(separators);
//or...
string[] sentences2 = "First sentence. Second sentence!".Split('!', '.', '?');