我正在使用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>
答案 0 :(得分:5)
您应该在包含简单DOM解析器的编程语言中编写一个小脚本,因为没有正则表达式解决方案可能是完美的。
另外,你的问题似乎与我有点矛盾。首先,您要删除不包含特定子字符串的所有行。然后你说你想匹配做 contian特定子串的所有行。
无论如何,这是两种情况下的正则表达式临时解决方案。要确保行内发生SUBSTRING
,您需要使用:
<tr>((?!</tr>).)+?SUBSTRING.+?</tr>
(?!...)
是一个负面的预测。在Notepad ++ 6之前可能不支持它,因此请确保更新。前瞻确保永远不会超过一个表行的末尾,只是为了在下一个表中找到SUBSTRING
。它通过声明+?
重复中的每个字符来表示它不标记</tr>
的开头。
为了确保行内没有SUBSTRING
,我们可以简单地将SUBSTRING
放入我们已有的负面预测中:
<tr>((?!SUBSTRING).)+?</tr>
请注意,如果您的代码中有额外的空格或开头标记中的属性以及类似的内容,则两种解决方案都将开始崩溃。这就是强烈建议使用DOM解析器的解决方案的原因。