2008-11-18 441 views
7

我測試的像這樣的字符串:正則表達式匹配HTML標籤和提取文本

<customtag>hey</customtag> 

我想用正則表達式來修改「customtag」標記之間的文本,以便它可能是這樣的:

<customtag>hey, this is changed!</customtag> 

我知道我可以使用MatchEvaluator來修改文本,但我不確定要使用正確的RegEx語法。任何幫助將非常感激。

+2

的[最佳答案](http://stackoverflow.com/a/1732454/80274)對這個問題迄今。 – 2012-02-18 00:37:06

回答

15

我不會用正則表達式要麼對於這一點,但如果你必須在這個表達式應該工作: <customtag>(.+?)</customtag>

7

在使用正則表達式解析和修改HTML之前,我會嚼碎自己的腿。使用XSLDOM


有兩條評論讓我澄清。正則表達式替換在OP的問題中適用於特定情況,但一般而言,正則表達式不是一個好的解決方案。正則表達式可以匹配regular languages,即可以由有限狀態機接受的輸入序列。 HTML可以包含任意深度的嵌套標籤,所以它不是一種常規語言。

這與問題有什麼關係?使用OP的問題的正則表達式,因爲它是寫作的作品,但如果標籤之間的內容包含其他標籤會怎麼樣?如果文字中出現文字<會怎麼樣? Jon Tackabury問了這個問題已經有11個月了,我猜那時候,他問題的複雜性可能會增加。

正則表達式是很棒的工具,我一直都在使用它們。但是使用它們來代替真正的解析器來處理需要輸入的解析器只能用於非常簡單的情況。這些案例超出正則表達式所能處理的範圍實際上是不可避免的。當發生這種情況時,你會被誘惑寫出一個更復雜的正則表達式,但是這些開發和調試很快變得非常費力。當解析需求擴展時,準備好廢除正則表達式解決方案。

XSL和DOM是兩種設計用於處理XML或XHTML標記的標準技術。這兩種技術都知道如何解析結構化標記文件,跟蹤嵌套標記,並允許您轉換標記屬性或內容。

下面是關於如何使用XSL與C#一對夫婦的文章:

這裏有幾個關於如何使用DOM與C#的文章:

這是一個。

+0

那麼,我偶爾會在受控環境中使用它們,並使用已知機器生成的代碼進行快速的工作... – PhiLho 2008-11-18 20:46:10

+4

那麼,爲什麼不告訴我們如何在C#中使用XSL或DOM呢?做清楚的陳述很容易。讓我們看看實際的代碼。正則表達式不適合解析一般的HTML,但它們完全適合用特定的HTML代碼做特定的事情。 – 2008-11-19 07:31:55

1

如果幫助DOM和XSL操作上的HTML網絡圖書館兩個標籤之間不會有任何其他標籤,這個正則表達式更安全一些,更高效:

<customtag>[^<>]*</customtag> 
0
//This is to replace all HTML Text 

var re = new RegExp("<[^>]*>", "g"); 

var x2 = Content.replace(re,""); 

//This is to replace all &nbsp; 

var x3 = x2.replace(/\u00a0/g,'');