我想将一个文本拆分为一个点,然后是一个空格或一个点,后面跟一个新行(\ n)一定长度。
例如,如果我有长文本,总共有356个字符。我想把这个文本分成三个差异。 1000或最接近的文字。字符,但每个文本应以完整有意义的句子结束。
我想这样做的原因是,我使用的API只需要1000或更少的char进行数据转换,但我有一些长度超过1000个字符的文本,所以我想分成多个文本,所以我没有任何文本超过1000个字符,每个文本以完整的形式结束。例如,文本到一个点后跟一个空格或一个点后跟一个新行(\ n)
我正在使用c#.Net
先谢谢。
答案 0 :(得分:0)
像这样的东西。显然,将“someText”替换为您的数据,并将shardLength设置为1000作为示例。如果句子大于块大小,则此解决方案会出错。
它目前通过有效地忽略它们来处理换行符 - 它只会拆分“。”
这意味着以“。”结尾的句子将在“。”后分割,“\ n”将在下一句的开头。
这里的优点是,如果您将其传递给API,您应该能够连接结果并将新行保留在适当的位置(假设API处理换行符)。
using System.Text.RegularExpressions;
public static void BlockSplitter()
{
String someText = @"This is some text.
The quick brown fox jumps over the lazy dog. Testing 1 2 3.
Sentence with no fullstop";
String[] sentences;
string delimiters = @"(?<=\.)";
sentences = Regex.Split(someText,delimiters);
String shard = String.Empty;
int shardLength = 45;
foreach (String sentence in sentences)
{
if (sentence.Length > shardLength)
{
//Raise an exception as the sentence
}
if ((shard.Length + sentence.Length) <= shardLength)
{
shard += sentence;
}
else
{
Console.WriteLine(shard);
shard = sentence;
}
}
Console.WriteLine(shard);
}