灵活的段落计数
本文关键字:段落计 | 更新日期: 2023-09-27 18:21:34
我已经仔细研究了这个问题,并试图修改答案,但我仍然被难住了。
我需要把段落数成一串。然而,段落可以用任意数量的换行符(1-n个换行符)分隔,以制表符或不以制表符开头(0-n个制表符),并且只包含空字符的空行不应该被计算在内(这是让我感到困惑的部分)。
示例文件:
First paragraph.
Second paragraph.
<tab>The third.
<tab> <tab> <tab>
<tab>The fourth.
The fifth.
如有任何帮助,我们将不胜感激。
您可以在选项卡和换行符上进行拆分,并删除空行
text.Split(new string[] { Environment.NewLine, "'t", "'n" }, StringSplitOptions.RemoveEmptyEntries)
.Where(x => x.Trim() != "")
请参阅演示:https://dotnetfiddle.net/Y79QjG
使用Split方法和此模式:
string[] result = Regex.Split(input, @"(?<='.)[^'S'n]*'n's*");
在线演示
图案详细信息:
(?<='.) # lookbehind: preceded by a literal dot (you can add ! and ? too)
[^'S'n]* # all whitespace characters except the linefeed (zero or more)
'n # linefeed character
's* # all whitespace characters (zero or more)
段落数是删除最后一个项目(如果该项目为空)后result[]
中的项目数。然而,您可以使用来避免空项目的问题
string[] result = Regex.Split(input, @"(?<='.)[^'S'n]*'n(?>'s*)(?!'z)");
在线演示
或
string[] result = Regex.Split(input, @"(?<='.)(?!'s*'z)[^'S'n]*'n's*");
在线演示
(注意,如果你想提取每个段落,你需要修剪最后一项右侧的空白)
出于某种奇怪的原因,这似乎奏效了
这需要在段落之间留出一行空白
否则做是没有意义的。
只要做一场比赛,同时比赛,匹配下一件事。递增计数器。
# @"(?m-)(?:'A|(?>^[^'S'r'n]*'r?'n){1,}(?!'z))"
(?xm-)
(?:
'A
| (?> ^ [^'S'r'n]* 'r? 'n ){1,}
(?! 'z )
)