3

我正在使用 Notepad++ 来清理一个又长又乱的 HTML 表格,并且我正在尝试使用正则表达式。

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

解包所有文件内容后,我可以使用以下正则表达式逐个选择每个表行及其所有内容

<tr>.+?</tr>

如何改进正则表达式以便仅选择和替换包含定义的子字符串<td>的表行,在它们的一部分内内?

我不知道这是否重要,但每个表格行的结构如下(我已将每个 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>
4

1 回答 1

6

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

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

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

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

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

为了确保SUBSTRING不会发生在行内,我们可以简单地放入SUBSTRING我们已经拥有的负前瞻:

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

请注意,如果您的标签中有额外的空格或开始标签中的属性以及类似的东西,这两种解决方案都将开始崩溃。这就是为什么强烈推荐使用 DOM 解析器的解决方案。

于 2012-11-13T16:55:01.087 回答