2012-08-10 72 views
1

我想替換一些html空標籤,如<。 />(。是b,h1,...但不是br,hr,...)正則表達式 - 替換一些html標籤

我認爲:Regex.Replace(myString,「< ..?/>」,「」)但I不知道如何排除br和hr。

有人可以幫助我嗎?

Thx!

+0

[RegEx match open tags but XHTML self-contained tags]可能的重複(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – 2012-08-10 14:17:58

+0

我認爲在這種情況下是可原諒的。 – mmdemirbas 2012-08-10 14:18:40

+3

@DavidB識別和替換特定的字符串模式不解析。 – 2012-08-10 14:19:13

回答

3

嘗試是這樣的:

(?:< *)(?!(?:br|hr)) *\w+ *\/ *\> 

添加任何標籤爲BR |人力資源的一部分(用他們劃定「|」),您不想匹配。

+0

如果您好奇,可以在此處閱讀它,這稱爲零寬度負向預覽:http://msdn.microsoft.com/en-us/library/az24scfc.aspx – crlanglois 2012-08-10 14:50:48

+0

稍微簡單一些的版本適用於您的案例:<(?!br | hr)(\ w)+ /> – crlanglois 2012-08-10 14:52:14

3

如果你知道你想幹什麼樣的標籤,你可以做這樣的:

Regex.Replace(myString, "<(b|p|div|span) />", "") 

在方括號中,所有選項都豎線分隔。

1

使用這樣的模式來匹配和替換它們:

<(TAG1|TAG2|TAG3|...)\s*/?> 

其中(TAG1|TAG2|TAG3|...)是你要處理的標籤,通過管道分離。請務必指定正則表達式應區分大小寫,因爲HTML標記不區分大小寫。例如,承認只是你列出的兩個,你可以創建一個這樣的正則表達式:

var exp = new Regex("<(b|h1)\s*/?>", RegexOptions.IgnoreCase); 

工作原理:

  • 括號中的比特只是確定它應該處理的標籤。
  • \s*可識別零個或多個空白字符。 (其中一個在正則表達式開始時不需要,因爲html標準在標籤名稱之前不允許有空格。)
  • /?可選地匹配'/'。 (這僅僅是要靈活有關處理HTML不使用的空標籤的/,因爲HTML規範並不總是需要它。)

你可以用它來除去像這樣的標籤:

var strippedText = exp.Replace(input, String.Empty);