正则表达式匹配HTML表行()不包含特定值

时间:2012-11-13 15:59:03

标签: html regex html-table notepad++ tablerow

我正在使用Notepad ++来清理冗长而混乱的HTML表格 我正在尝试使用正则表达式。

我需要删除不包含特定值的所有表格行(我可以称之为 substring 吗?)。

在解开所有文件内容之后,我已经能够使用以下正则表达式逐个选择每个表格行及其所有内容

<tr>.+?</tr>

如何改进正则表达式,以便仅选择和替换包含<td>部分内部某些 substring 的表行?

我不知道这是否重要,但每个表行的结构如下(我把每个HTML标记放在那里,这些点代表标准内容/值)

<tr>
    <td> ... </td>
    <td> ... </td>
    <td> <a sfref="..." href="...">!! SUBSTRING I HAVE TO MATCH HERE !!</a> </td>
    <td> <img /> </td>
    <td> ... </td>
    <td> ... </td>
    <td> ... </td>
    <td> ... </td>
</tr>

1 个答案:

答案 0 :(得分:5)

您应该在包含简单DOM解析器的编程语言中编写一个小脚本,因为没有正则表达式解决方案可能是完美的。

另外,你的问题似乎与我有点矛盾。首先,您要删除包含特定子字符串的所有行。然后你说你想匹配 contian特定子串的所有行。

无论如何,这是两种情况下的正则表达式临时解决方案。要确保行内发生SUBSTRING,您需要使用:

<tr>((?!</tr>).)+?SUBSTRING.+?</tr>

(?!...)是一个负面的预测。在Notepad ++ 6之前可能不支持它,因此请确保更新。前瞻确保永远不会超过一个表行的末尾,只是为了在下一个表中找到SUBSTRING。它通过声明+?重复中的每个字符来表示它不标记</tr>的开头。

为了确保行内没有SUBSTRING,我们可以简单地将SUBSTRING放入我们已有的负面预测中:

<tr>((?!SUBSTRING).)+?</tr>

请注意,如果您的代码中有额外的空格或开头标记中的属性以及类似的内容,则两种解决方案都将开始崩溃。这就是强烈建议使用DOM解析器的解决方案的原因。