我想将文本分成句子。句子以(点)或?结尾或者 !后跟一个或多个空白字符,下一个句子以大写字母开头。
例如:
第一句话。第二句话!
我怎样才能做到这一点?
您可以拆分与空格匹配的正则表达式,并使用查找句子终止符的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.
注:
此解决方案仅解决问题中概述的简单情况。要对任何类型的句子或其他语言执行此操作,解决方案将复杂得多。考虑到句子甚至可能写错或标点符号放错位置,很可能不可能做一些可以处理任何句子的事情,即使只是英语句子。
您想支持哪些语言?例如,在泰语中,单词之间没有空格,句子之间也用空格分隔。所以,总的来说,这个任务是非常复杂的。另请考虑 Fredrik Mörk 的有用评论。
因此,首先您需要定义一组关于什么是“句子”的规则。那么欢迎您使用建议的解决方案之一。
试试这个(MSDN)
char[] separators = new char[] {'!', '.', '?'};
string[] sentences1 = "First sentence. Second sentence!".Split(separators);
//or...
string[] sentences2 = "First sentence. Second sentence!".Split('!', '.', '?');