VB.net:提取并替换所有HTML实例

时间:2012-11-26 16:39:43

标签: .net regex vb.net replace

我正致力于在我们的一个遗留系统中操作/提取格式良好的HTML中的数据。我需要使用正则表达式来解析HTML,找到某些模式,提取数据,并返回一些修改过的HTML。我知道正则表达式和HTML永远不是答案,但鉴于我确切知道数据的来源以及数据是否正确结构,我相信这将适用于特定情况。

我正在使用的HTML具有以下模式:

<i>Name1</i>: Some text goes here<br/>
<i>Name2</i>: Some different text goes here<br/>
<i>Name3</i>: Some other different text goes here<br/>

我需要将HTML更改为以下内容:

<i>Name1</i><p>Some text goes here</p>
<i>Name2</i><p>Some different text goes here</p>
<i>Name3</i><p>Some other different text goes here</p>

基本上,我想取内部文本,将其包装在p标签中,然后删除尾部br。

我想做以下事情:

Dim HTML as String = [The HTML goes here]
html = Regex.Replace(html, "</i>:(.+?)<br\s*\/?>", "</i><p>(.+?)</p>", RegexOptions.Multiline)

但显然无效。

在VB.net中,如何用新的HTML替换所有想要的HTML实例?

2 个答案:

答案 0 :(得分:2)

我建议使用HTML Agility Pack来解析和操作HTML(特别是如果HTML的格式不规则)。源代码下载了一堆示例项目,因此您可以看到如何使用它。

一般Regex is not a good solution for parsing HTML

答案 1 :(得分:1)

试一试:

Dim HTML as String = [The HTML goes here]
Dim evaluator As MatchEvaluator = Function(m As Match)
                                  Return "</i><p>" & m.Groups(1).Value & "</p>"
                                  End Function
html = Regex.Replace(html, "</i>:(.+?)<br\s*\/?>", evaluator, RegexOptions.Multiline)