例如: 我想删除所有突出显示的标签 alt text http://shup.com/Shup/299976/110220132930-My-Desktop.png
答案 0 :(得分:1)
如果这只是关于快速编辑文件,并且你的编辑器支持正则表达式替换,你可以使用这样的正则表达式:
<[^>]+></[^>]+>
搜索此正则表达式,并替换为空字符串。
注意:这在任何方面都不安全 - 不要依赖它,因为它可以找到更多的东西而不仅仅是有效的空标签。 (例如,它也会找到<a></b>
。)使用正则表达式没有安全的方法 - 但如果你手动检查每个替换,你应该没问题。如果你需要真正安全的替换,那么要么你必须找到一个支持这个的编辑器(JEdit可能是一个不错的选择,但我没有检查过),或者你必须自己解析文件 - 例如使用XSLT。
答案 1 :(得分:0)
您可以在任何支持它们的编辑器中使用正则表达式。例如,我在Dreamweaver中测试了this one:
<(?!\!|input|br|img|meta|hr)[^/>]*?>[\s]*?</[^>]*?>
只需进行搜索并替换所有(将正则表达式作为搜索字符串,不作为替换)。但请注意,这可能会删除必要的空格。如果您只是想删除空标签,那么
<(?!\!|input|br|img|meta|hr)[^/>]*?></[^>]*?>
将是要走的路。
更新:您也想删除&amp; nbsps:
<(?!\!|input|br|img|meta|hr)[^/>]*?>(?:[\s]| )*?</[^>]*?>
我没有验证这个 - 它应该没问题,试试看: - )
答案 2 :(得分:0)
你所要求的听起来像是正则表达式的工作。许多编辑器支持正则表达式查找/替换。就个人而言,我可能会从Perl的命令行中做到这一点(sed也可以),但那只是我。
perl -pe 's|<([^\s>]+)[^>]*></\1>||g' < file.html > new_file.html
或者如果你很勇敢,请编辑文件:
perl -pe 's|<([^\s>]+)[^>]*></\1>||g' -i file.html
这将删除:
<p></p>
<p id="foo"></p>
但不是:
<p>hello world</p>
<p></a>
警告: <img src="pic.png"></img>
和<br></br>
等内容也将被删除。你的问题并不明显,但我认为这是不可取的。也许你并不担心,因为你知道你的所有图像都被声明为<img src="pic.png"/>
。否则,需要修改正则表达式来解释这个问题,但我决定从简单开始做一个更简单的解释......
它的工作原理是匹配开始标记:文字<
后跟标记名称(一个或多个不是空格的字符或>
= [^\s>]+
),任何属性(零)或更多不是>
= [^>]*
)的字符,然后是文字>
;以及具有相同名称的结束标记:这利用了我们捕获标记名称的事实,因此我们可以使用反向引用= </\1>
。然后用空字符串替换匹配。
如果您不熟悉此处使用的语法/术语,我是perlre文档页面的粉丝。其他语言中的正则表达式语法应该非常相似,如果不相同,那么即使你没有Perl,这也很有用:)
哦,还有一件事。如果您有<div><p></p></div>
之类的内容,则不会同时收到这些内容。您必须执行多次传递:第一次将删除<p></p>
,而第二次删除<div></div>
。在Perl中,替换运算符返回所做的替换次数,因此您可以:
perl -pe '1 while s|<([^\s>]+)[^>]*></\1>||g' < file.html > new_file.html