具有特定标签的String.Split

时间:2012-07-06 12:11:29

标签: c# string split

我想拆分一串html标签。例如,我有一个字符串:

<p></p>

<table>

<table><p></p></table>


</table>

我想要追溯的是:

<table>

<table><p></p></table>


</table>

现在的问题是,当我打电话时:

string[] values = pContent.Split(new string[] {"<table>","</table>" }, StringSplitOptions.RemoveEmptyEntries);

我得到:

<table>

    <table><p></p>

我如何得到余下的?

1 个答案:

答案 0 :(得分:4)

您可以尝试以下代码:

        string input = String.Concat("<root>", @"<p></p><table><table><p></p></table></table>", "</root>");

        XDocument doc = XDocument.Parse(input);
        var valuesStr = doc.Root.Element("table").ToString();
        string[] values = Regex.Matches(valuesStr, @"<.+?>")
            .Cast<Match>()
            .Select(o => o.Groups[0].Value)
            .ToArray();

它首先创建一个XDocument类的实例(解析XML的类之一),它添加了名为“root”的根元素,只是为了能够创建XDocument(每个XML文档必须有一个根)。 XML文档的内容是从字符串解析的。然后它获取包含文档的文本表示的字符串 - 首先访问Root属性,因为“table”元素正好在根节点下面,之后调用带有“table”的Element()方法获取第一个元素在根目录下使用名称“table”(在此示例中,节点下只有一个这样的元素),之后ToString()获取文本描述。

Regex.Matches用于从字符串中提取每个单独的元素,它返回MatchCollection,然后在Castn()上调用IEnumerable,然后在IEnumerable上调用Select()扩展方法,获取Regex捕获的文本值。匹配IEnumerable中的每个Match,然后通过ToArray()方法将这些值作为string []返回。