use*_*136 3 html regex html-table notepad++ tablerow
我正在使用Notepad ++来清理冗长而混乱的HTML表,我正在尝试使用正则表达式.
我需要删除所有不包含特定值的表行(我可以调用该子字符串吗?).
在解开所有文件内容后,我已经能够使用以下正则表达式逐个选择每个表行及其所有内容:
<tr>.+?</tr>
Run Code Online (Sandbox Code Playgroud)
我如何改进正则表达式,以便只选择和替换包含在其中<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>
Run Code Online (Sandbox Code Playgroud)
您应该在包含简单DOM解析器的编程语言中编写一个小脚本,因为没有正则表达式解决方案可能是完美的.
此外,你的问题似乎与我有点矛盾.首先,您要删除所有不包含特定子字符串的行.然后你说你想匹配的所有行做 contian特定的子.
无论如何,这是两种情况下的正则表达式临时解决方案.要确保SUBSTRING在行内发生,您需要使用:
<tr>((?!</tr>).)+?SUBSTRING.+?</tr>
Run Code Online (Sandbox Code Playgroud)
(?!...)是一个负面的先行.在Notepad ++ 6之前可能不支持它,因此请确保更新.前瞻确保永远不会超过一个表行的末尾,只是为了找到SUBSTRING下一个表行.它通过断言我们+?重复中的每一个字符来做到这一点,它不标记开头</tr>.
为了确保SUBSTRING在行内不会发生这种情况,我们可以简单地SUBSTRING加入我们已经拥有的负面预测:
<tr>((?!SUBSTRING).)+?</tr>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的标记或开头标记中的属性以及类似内容中有额外的空格,则两种解决方案都将开始崩溃.这就是强烈建议使用DOM解析器的解决方案的原因.