2016-09-16 178 views
1

解決方案刪除HTML開始標記屬性:記事本++ - 用正則表達式

查找:<([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> 

回答

0

.*是貪婪所以它匹配的一切,直到你的行中的最後">。這是你的第一個正則表達式做什麼:

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

嘗試:

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

我建議你看插件記事本++。使用正則表達式解析HTML可能會有很多問題。

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

閉合之前*\/?>是匹配可選空白和自閉合元件。 \h我更喜歡使用,但我不知道Notepad ++是否支持(我是mac'er)。

更新:

捕捉自行閉合的單元組全封閉部分的收盤位。

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

然後用第二個捕獲組替換。

<\1$2 

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

+0

謝謝你的解決方案。 '。*? *?>是在一行中區分'>'的關鍵。 '\ /'實際上是可選的。但我怎樣才能保留'
'? – Louis55

+0

哦,你需要保留自動關閉?我想如果你捕捉到它的工作。 https://開頭regex101。com/r/qK5uY3/3 – chris85

+0

一切正常。再次感謝。 – Louis55