如何创建一个正则表达式来匹配内部的所有内容,包括<div> ... </div>?

时间:2012-11-28 05:40:04

标签: regex html-parsing

这是我正在使用的示例文本。我正在使用Coda进行查找和替换......

<td width="20%"><div > Item #</div></td>
<td width="20%"><div > Pole Tip</div></td>
<td width="20%"><div > Length</div></td>
<td width="20%"><div > Test Weight (lbs.)</div></td>
<td width="20%"><div > Price</div></td>

我想摆脱标记td内文本的div标签。

Ex ...我想改变这个:

<td width="20%"><div > Item #</div></td>

到此:

<td width="20%">Item #</td>

到目前为止,我将此作为正则表达式:

<div >[\s\w\(\)#]*</div>

然而,这与我的示例文本中的所有上述内容相匹配:

<td width="20%"><div > Test Weight (lbs.)</div></td>

在我的正则表达式中,我甚至试图添加(和)......我做错了什么?

2 个答案:

答案 0 :(得分:1)

在回复Andy时,我同意将良好形成的标记的数据解析保留在DOM导航工具中。 XML肯定,或HTML&gt; XML转换器是好的。我不知道Miles正在使用什么,但我经常使用格式错误的HTML以及Markup解析器无法解析的HTML。

在我的一些关于Document Parsing的Regex教程中,我讨论了Regex Trim模式,它只是零或更多空白{\ s *}。虽然你可能会回避它,因为它为Regex模式增加了一点点长度,但实际上几乎没有效率损失。那就是说......

(<td[^>]*>)\s*<div[^>]*>\s*((?:[^<]*(?(?!</div>\s*</td>)<))*)\s*</div>\s*(</td>)

将此替换为$ 1 $ 2 $ 3,您获胜,并获得干净的结果。当然,您可以根据需要替换或删除任意数量的Trims(\ s *),如果我正在解析文档或格式错误的标记,则只需个人偏好。

答案 1 :(得分:0)

那是因为你错过了.这很好用

<div >[\s\w\(\)#.]*</div>