如何将带有HTML标签的文本拆分为数组

6

我有一些带有 HTML 标记的简单文本 (只有 <b> 标签),例如:

Lorem Ipsum 是印刷和排版行业的<b>标准虚拟文字</b>

我想将这段文本拆分为以下数组:

[0] - Lorem Ipsum is 
[1] - <b>simply dummy</b>
[2] - text of the printing and
[3] - <b>typesetting industry</b>

HTML标签内的文本必须与其他文本分开。有没有简单的解决方案?

谢谢


你尝试过使用Split()函数或正则表达式实现某些功能吗? - Mivaweb
供您了解。HTML 无法通过正则表达式正确解析。请参考以下链接:https://dev59.com/X3I-5IYBdhLWcg3wq6do - Razvan Dumitru
但在这种情况下,您可以实例化一个数组并添加 [0] - Lorem Ipsum is 直到找到 <b>。当您找到 <b> 时,您搜索下一个 </b> 并将其放置在数组 [1] - <b> simply dummy </b> 中,以此类推。就像最小的解析算法一样。如果您没有嵌套的 <b>,则这将起作用。 - Razvan Dumitru
如果您被允许使用第三方库,那么有一个名为htmlagility pack的库可以帮助您完成这个任务。 - Thomas Lindvall
@kubakista 它将会:http://stackoverflow.com/questions/29139320/split-string-to-array-from-text-and-html-tag - Thirisangu Ramanathan
2个回答

5

您可以使用以下代码来实现此操作

string value = @"Lorem Ipsum is <b>simply dummy</b> text of the printing and <b>typesetting industry</b>";
var parts = Regex.Split(value, @"(<b>[\s\S]+?<\/b>)").Where(l => l != string.Empty).ToArray();

1
我刚刚写了这个程序,测试过了,它可以正常运行。虽然有点丑陋,但是它能用哈哈。
    public string[] getHtmlSplitted(String text)
    {
        var list = new List<string>();
        var pattern = "(<b>|</b>)";
        var isInTag = false;            
        var inTagValue = String.Empty;

        foreach (var subStr in Regex.Split(text, pattern))
        {
            if (subStr.Equals("<b>"))
            {
                isInTag = true;
                continue;
            }
            else if (subStr.Equals("</b>"))
            {
                isInTag = false;
                list.Add(String.Format("<b>{0}</b>", inTagValue));
                continue;
            }

            if (isInTag)
            {
                inTagValue = subStr;
                continue;
            }

            list.Add(subStr);

        }
        return list.ToArray();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接