从html字符串中拆分段并删除空段

时间:2013-03-19 04:01:52

标签: c# html regex

我有一串html。我想将所有段落分成数组列表。但分裂的段落应该不是空的。拆分段落应包含一些普通文本,如果它只包含html文本,并且里面没有普通文本,如:<htmltag>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</htmltag>,那么它应该被销毁或不被拆分。

这是如何在html字符串中拆分段落的示例:

System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(htmlString, @"<p>\s*(.+?)\s*</p>");
ArrayList groupCollection = new ArrayList();
while (m.Success)
{
   groupCollection.Add(m.Value);
   m = m.NextMatch();
}
ArrayList paragraphs = new ArrayList();
if (groupCollection.Count > 0)
{
   foreach (object item in groupCollection)
   {
      paragraphs.Add(item);
   }
}

上面的代码可以拆分所有段落但是它无法识别哪个段落是空的,就像我上面说的那样。

1 个答案:

答案 0 :(得分:0)

我已经回答了我自己的问题。这是我自己版本的代码:

System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(htmlString, @"<p>\s*(.+?)\s*</p>");
    ArrayList groupCollection = new ArrayList();
    while (m.Success)
    {
        groupCollection.Add(m.Value);
        m = m.NextMatch();
    }
    ArrayList paragraphs = new ArrayList();
    if (groupCollection.Count > 0)
    {
        foreach (object item in groupCollection)
        {
            try
            {
                System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex("<[^>]*>");
                // replace all matches with empty string
                string str = rx.Replace(item.ToString(), "");
                string str1 = str.Replace("&nbsp;", "");
                if (!String.IsNullOrEmpty(str1))
                {
                    paragraphs.Add(item.ToString());
                }
            }
            catch
            {
                //This try-catch just prevent future error.
            }
        }
    }

在上面的代码上。您可以看到我先删除段落中的所有html标记,然后替换html字符串中的所有空格。这将有助于我识别一个空段落。