我需要从一些文件中解析一些文本并按部分拆分ti,取决于它是文本或html的简单文本部分。
让我们说,这是示例文本
This section should include any considerations for:
<ul>
<li>C</li>
<li>B</li>
<li>A</li>
</ul>
h1. Support Contracts
<p>simple par</p>
它应该像那样拆分(使用JSON表示法,因为写入速度快,不管容器的类型是什么)
[{
part: 1,
text: "This section should include any considerations for:"
},
{
part: 2,
text:"<ul> <li>C</li><li>B</li> <li>A</li></ul>"
},
{
part: 3,
text:"h1. Support Contracts"
},
{
part: 4,
text:"<p>simple par</p>"
}]
Html非常简单,所有标签都保证关闭(由程序生成)
哪种方式最快(不使用任何第三方库)?我可以在这里使用正则表达式完成这项任务吗?
答案 0 :(得分:1)
如果我正确理解你的要求,我不确定我会用正则表达式解决这个问题。看起来只是简单地走动文本寻找标签并随时建立一个碎片列表。
var pieces = new List<string>();
int current = 0;
while (current < text.Length)
{
var first = text.IndexOf('<', current);
if (first != -1)
{
var second = text.IndexOf('>', first);
if (second != -1)
{
var tag = text.Substring(first+1, (second-first-1));
var closeTag = $"</{tag}>";
var close = text.IndexOf(closeTag, second+1);
if (close != -1)
{
close += closeTag.Length;
if (current < first)
{
pieces.Add(text.Substring(current, (first-current)).Trim());
}
current = close + 1;
pieces.Add(text.Substring(first, (close-first)).Trim());
}
else
{
current = second + 1;
}
}
else
{
current = first+1;
}
}
else
{
pieces.Add(text.Substring(current).Trim());
break;
}
}