notepad ++ - 使用正则表达式删除HTML开始标记中的属性

时间:2016-09-16 14:50:10

标签: html regex replace attributes notepad++

解决方案:

查找:<([a-z]+) .?=".?( */?>)

替换为:<\1$2

我通常会将论坛网站中的表格复制到博客网站。

我想在所有开始标记中都没有属性 表格如下:

1|<table unwanted_attribute_1>
2|<tbody unwanted_attribute_2>
3|<tr unwanted_attribute_3><td unwanted_attribute_4><br unwanted_attribute_5 /></td></tr>
4|<tr unwanted_attribute_3><td unwanted_attribute_4><span unwanted_attribute_6></span></td></tr>
5|</tbody>
6|</table>
Attributes like "cellspacing", "class", "style", "href" and "target".

我找到了两个答案,但似乎没有帮助 [A1]:它使用固定条件来查找和替换特定术语。但在我的情况下,开始标签随处可见,因文章而异 [A2]:我尝试了这个答案,但它的工作原理如下。

我找到<([a-z]+) .*=".*">并替换为<\1> 第1行和第2行有效,但第3行和第4行混乱。

我应该如何使用正则表达式?

编辑:

<table cellspacing="0" class="t_table" style="background-color: #f8f8f8; border-collapse: collapse; border: 1px solid rgb(227, 237, 245); color: #444444; empty-cells: show; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 24px; table-layout: auto; width: 673px; word-wrap: break-word;">
<tbody style="word-wrap: break-word;">
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆<a class="relatedlink" href="◆◆◆" style="border-bottom: 1px solid blue; color: #639805; word-wrap: break-word;" target="_blank">◆◆</a>◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆<br style="word-wrap: break-word;" />◆◆◆◆</td></tr>
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr>
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr>
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">= ◆◆◆◆ =<br style="word-wrap: break-word;" /></td></tr>
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆</td></tr>
<tr style="word-wrap: break-word;"><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆◆◆</td><td style="border: 1px solid rgb(227, 237, 245); overflow: hidden; padding: 4px; word-wrap: break-word;">◆◆◆◆</td></tr>
</tbody></table>

1 个答案:

答案 0 :(得分:0)

您的.*是贪婪的,所以它会匹配到您行上的最后一个">的所有内容。这是你的第一个正则表达式:

https://regex101.com/r/qK5uY3/1

尝试:

<([a-z]+) .*?=".*? *\/?>

我建议查看notepad ++的插件。使用正则表达式解析HTML可能存在许多问题。

https://regex101.com/r/qK5uY3/2

结束*\/?之前的>匹配可选空格和自闭元素。 \h我更喜欢使用,但我不知道Notepad ++是否支持(我是mac'er)。

<强>更新

捕获自闭合元素组的闭合位完全闭合部分。

<([a-z]+) .*?=".*?( *\/?>)

然后替换为第二个被捕获的组。

<\1$2

演示:https://regex101.com/r/qK5uY3/3