在 C# 中将文本拆分为句子 [已关闭]

问题描述 投票:0回答:4

我想将文本分成句子。句子以(点)或?结尾或者 !后跟一个或多个空白字符,下一个句子以大写字母开头。

例如:

第一句话。第二句话!

我怎样才能做到这一点?

c# text split
4个回答
34
投票

您可以拆分与空格匹配的正则表达式,并使用查找句子终止符的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.

注:

此解决方案仅解决问题中概述的简单情况。要对任何类型的句子或其他语言执行此操作,解决方案将复杂得多。考虑到句子甚至可能写错或标点符号放错位置,很可能不可能做一些可以处理任何句子的事情,即使只是英语句子。


5
投票

您想支持哪些语言?例如,在泰语中,单词之间没有空格,句子之间也用空格分隔。所以,总的来说,这个任务是非常复杂的。另请考虑 Fredrik Mörk 的有用评论。

因此,首先您需要定义一组关于什么是“句子”的规则。那么欢迎您使用建议的解决方案之一。


4
投票

试试这个(MSDN

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

3
投票

你试过

String.Split()
吗?请参阅有关它的文档这里

© www.soinside.com 2019 - 2024. All rights reserved.