Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何拆分字符串并保留分隔符?_C#_Asp.net_String_Split_Translation - Fatal编程技术网

C# 如何拆分字符串并保留分隔符?

C# 如何拆分字符串并保留分隔符?,c#,asp.net,string,split,translation,C#,Asp.net,String,Split,Translation,我知道你看到了很多像我一样的问题,但我希望我的问题有点不同。我正在做一个翻译,我想把一篇文章分成几个句子,但当我写下这段代码时: public static string[] GetSentences(string Text) { if (Text.Contains(". ") || Text.Contains("? ") || Text.Contains("! ")) return Text.Split(new string[] { ". ", "? ", "! " }

我知道你看到了很多像我一样的问题,但我希望我的问题有点不同。我正在做一个翻译,我想把一篇文章分成几个句子,但当我写下这段代码时:

public static string[] GetSentences(string Text)
{
    if (Text.Contains(". ") || Text.Contains("? ") || Text.Contains("! "))
        return Text.Split(new string[] { ". ", "? ", "! " }, StringSplitOptions.RemoveEmptyEntries);
    else
        return new string[0];
}
它删除了“.”、“?”和“!”。我想留住他们,我怎么才能做到



注意:我想按“.”点和空格“?”分隔问号和空格…

简单,先替换它们。为了便于阅读,我将使用
“|”
,但您可能希望使用更具异国情调的内容

// this part could be made a little smarter and more flexible.    
// So, just the basic idea:
Text = Text.Replace(". ", ". |").Replace("? ", "? |").Replace("! ", "! |");

if (Text.Contains("|")) 
    return Text.Split('|', StringSplitOptions.RemoveEmptyEntries);
我想知道
else返回新字符串[0],这似乎很奇怪。假设没有需要返回输入字符串的分隔符时,只需删除
if/else
构造

Regex方式:

return Regex.Split(Text, @"(?<=[.?!])\s+");


那么你想保存数组中分隔的分隔符吗?我希望delimeters的可能副本带有一个句子也许这很糟糕,但你可以在拆分后获得数组中每个成员的长度,然后按长度拆分。
(?<=[.?!])\s+