2012-08-29 70 views
0

我有使用正则表达式准备字符串的问题。 我写了这个功能:使用C#去除HTML标签

private String parseAnswer(String res) 
    { 
     String[] pattern = new String[16] { "<head[^>]*?>.*?</head>", "<style[^>]*?>.*?</style>", "<script[^>]*?.*?</script>", "<object[^>]*?.*?</object>", "<embed[^>]*?.*?</embed>", "<applet[^>]*?.*?</applet>", "<noframes[^>]*?.*?</noframes>", "<noscript[^>]*?.*?</noscript>", "<noembed[^>]*?.*?</noembed>", "</?((address)|(blockquote)|(center)|(del))", "</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))", "</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))", "</?((table)|(th)|(td)|(caption))", "</?((form)|(button)|(fieldset)|(legend)|(input))", "</?((label)|(select)|(optgroup)|(option)|(textarea))", "</?((frameset)|(frame)|(iframe))" }; 
     String[] replacement = new String[16] { " ", " ", " ", " ", " ", " ", " ", " ", " ", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0" }; 

     for (int i = 0; i < pattern.Length; i++) 
     { 
      res = Regex.Replace(res, pattern[i], replacement[i]); 
     } 

     return res; 
    } 

这个函数获取HTML代码作为输入。我想清除一些HTML标签。要做到这一点,我准备了阵列的模式。但似乎我的功能并没有清除HTML代码。 我的模式是我想要移除的HTML标记列表。我不删除一些标签,但只添加\ n。

你能帮我这个正则表达式吗?或者给我任何图书馆做任务?我的目标是删除HTML标签,只接收网站文本解析。

编辑: 好吧我可以使用HTMLAgilityPack,但我有几个问题: htmlDoc.LoadHtml(URL); - 我需要翻译结果为UTF8 - > HTMLAgilityPack有任何功能转换? 第二个通常我想将InnerText的结果放到Json并发送给Javascript。 我如何删除字符与禁止在Javascript中?

回答

6

Regex倾向于是poor choice for parsing HTML,特别是来自不同的来源。

我建议使用内置解析器目的,如改为HTML Agility Pack

什么是完全的HTML敏捷性包(HAP)?

这是一个敏捷的HTML解析器,它构建了一个读/写DOM并支持普通的XPATH或XSLT(实际上,您不需要理解XPATH或XSLT就可以使用它,不用担心)。它是一个.NET代码库,允许您解析“离开网页”的HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与提出System.Xml非常相似,但是对于HTML文档(或流)。

源代码下载附带了许多示例项目,这些项目记录了如何将库用于不同的任务。