首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >notepad++ -使用regex删除HTML标记中的属性

notepad++ -使用regex删除HTML标记中的属性
EN

Stack Overflow用户
提问于 2016-09-16 14:50:10
回答 1查看 1.2K关注 0票数 1

解决方案:

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

替换为:<\1$2

我通常把表格从论坛网站复制到博客网站。

我不希望所有开始标记都有属性。

桌子是这样的:

代码语言:javascript
复制
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行搞砸了。

我该如何使用regex?

编辑:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 15:02:09

您的.*是贪婪的,所以它匹配所有东西,直到您的行上的最后一个">。下面是您的第一个regex所做的工作:

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

尝试:

代码语言:javascript
复制
<([a-z]+) .*?=".*? *\/?>

我建议查看notepad++的插件。使用regex解析HTML可能会出现许多问题。

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

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

更新:

若要捕获自关闭元素组的结束位,则需要完整的结束部分。

代码语言:javascript
复制
<([a-z]+) .*?=".*?( *\/?>)

然后用第二个被俘组代替。

代码语言:javascript
复制
<\1$2

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39534394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档