C# 如何将文本拆分为段落?
我需要将一个字符串拆分为多个段落,并计算这些段落(由两行或多行空行分隔的段落)。 此外,我需要阅读课文中的每个单词,并且需要能够提到这个单词所属的段落 例如(每个段落不止一行,段落之间有两行空行):C# 如何将文本拆分为段落?,c#,C#,我需要将一个字符串拆分为多个段落,并计算这些段落(由两行或多行空行分隔的段落)。 此外,我需要阅读课文中的每个单词,并且需要能够提到这个单词所属的段落 例如(每个段落不止一行,段落之间有两行空行): 这是 第一 段落 这是 第二 段落 这是 第三 段落 我认为您希望将文本拆分为段落,但您是否有分隔符来告诉您需要拆分字符串?例如,如果您想将段落标识为“.”,这应该可以做到 string parations=“我的第一段,从前” string[]单词=段落。拆分('.') 其结果将是: My fir
这是
第一
段落
这是
第二
段落
这是
第三
段落
我认为您希望将文本拆分为段落,但您是否有分隔符来告诉您需要拆分字符串?例如,如果您想将段落标识为“.”,这应该可以做到
string parations=“我的第一段,从前”代码>
string[]单词=段落。拆分('.')代码>
其结果将是:
My first paragraph
Once upon a time
请记住,“.”字符已被删除 我认为您希望将文本拆分为段落,但是您是否有分隔符来告诉您需要拆分字符串?例如,如果您想用“.”标识段落,这应该可以做到
string parations=“我的第一段,从前”代码>
string[]单词=段落。拆分('.')代码>
其结果将是:
My first paragraph
Once upon a time
请记住,“.”字符已被删除 像这样的东西应该适合你:
var paragraphMarker = Environment.NewLine + Environment.NewLine;
var paragraphs = fileText.Split(new[] {paragraphMarker},
StringSplitOptions.RemoveEmptyEntries);
foreach (var paragraph in paragraphs)
{
var words = paragraph.Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
.Select(w => w.Trim());
//do something
}
您可能需要更改行分隔符,文件可以有不同的变体,如“\n”
,“\r”
,”\r\n”
您还可以在Trim
函数中传递特定字符,以删除符号,如,,“
,!”代码>,“,
等
编辑:要增加灵活性,可以使用regexp拆分段落:
var paragraphs = Regex.Split(fileText, @"(\r\n?|\n){2}")
.Where(p => p.Any(char.IsLetterOrDigit));
foreach (var paragraph in paragraphs)
{
var words = paragraph.Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
.Select(w => w.Trim());
//do something
}
像这样的东西应该适合你:
var paragraphMarker = Environment.NewLine + Environment.NewLine;
var paragraphs = fileText.Split(new[] {paragraphMarker},
StringSplitOptions.RemoveEmptyEntries);
foreach (var paragraph in paragraphs)
{
var words = paragraph.Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
.Select(w => w.Trim());
//do something
}
您可能需要更改行分隔符,文件可以有不同的变体,如“\n”
,“\r”
,”\r\n”
您还可以在Trim
函数中传递特定字符,以删除符号,如,,“
,,”!“
,,“
等
编辑:要增加灵活性,可以使用regexp拆分段落:
var paragraphs = Regex.Split(fileText, @"(\r\n?|\n){2}")
.Where(p => p.Any(char.IsLetterOrDigit));
foreach (var paragraph in paragraphs)
{
var words = paragraph.Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
.Select(w => w.Trim());
//do something
}
公共静态列表拆分行(字符串isstr,int size=100)
{
var words=isstr.Split(新[]{''},
StringSplitOptions.RemoveEmptyEntries);
List lo=新列表();
字符串tmp=“”;
int i=0;
for(i=0;isize)
{
lo.Add(tmp);
tmp=“”;
}
tmp+=“”+字[i];
}
如果(!String.IsNullOrWhiteSpace(tmp))
{
lo.Add(tmp);
}
返回lo;
}
公共静态列表拆分行(字符串isstr,int size=100)
{
var words=isstr.Split(新[]{''},
StringSplitOptions.RemoveEmptyEntries);
List lo=新列表();
字符串tmp=“”;
int i=0;
for(i=0;isize)
{
lo.Add(tmp);
tmp=“”;
}
tmp+=“”+字[i];
}
如果(!String.IsNullOrWhiteSpace(tmp))
{
lo.Add(tmp);
}
返回lo;
}
显示您尝试的代码并添加段落的定义方式。。。新行?您可以使用someText.Split(新字符[]{',},StringSplitOptions.RemoveEmptyEntries)拆分文本;我不明白为什么这样的问题得到了3票,而其他没有发布代码的问题得到了否定票?显示您尝试过的代码并添加如何定义段落。。。新行?您可以使用someText.Split(新字符[]{',},StringSplitOptions.RemoveEmptyEntries)拆分文本;我不明白为什么这样的问题得到了3票,而其他没有发布代码的问题得到了否定票?这一行实际执行了什么。选择(w=>w.Trim())@CobyAbutbulTrim
从字符串的开头和结尾删除空白字符(还有TrimStart
-仅从开头,而TrimEnd
-仅从结尾)。如果您需要删除一些其他符号,例如。
,您可以将它们传递到“Trim”中,例如Trim(new[]{'.','.','.','?','!'})
,这样它将删除字符串开头和结尾的所有字符<代码>选择
函数将修剪
应用到我们从分割
函数中获得的每个字符串。太好了。感谢Andrey TretyakAs,我理解段落。长度应该包含我拥有的段落数,但它始终返回1。@CobyAbutbul可能是您的文件有不同的行尾符号。尝试以下操作:var parages=fileText.Split(新[]{paragraphMarker,“\n\n”,“\r\r”,“\r\n\r\n”},StringSplitOptions.removemptyEntries)代码>。您也可以考虑使用ReXEP类似<代码> var段落=ReEX.Read(FielEXT,@)(\r\n·\n){ 2 })< /代码>。如果您可以添加包含两个或多个段落的文本示例,那就太好了。这一行实际执行的是什么。选择(w=>w.Trim())@CobyAbutbulTrim
从字符串的开头和结尾删除空白字符(还有TrimStart
-仅从开头,而TrimEnd
-仅从结尾)。如果您需要删除一些其他符号,例如。
,您可以将它们传递到“Trim”中,例如Trim(new[]{'.','.','.','?','!'})
,这样它将删除字符串开头和结尾的所有字符<代码>选择
函数将修剪
应用到从获取的每个字符串