2010-03-15 120 views
3

我有以下字符串:正則表達式替換引號中的HTML標籤僅

<div id="mydiv">This is a "div" with quotation marks</div> 

我想使用正則表達式返回如下:

<div id='mydiv'>This is a "div" with quotation marks</div> 

請注意,在id屬性div現在被撇號包圍了嗎?

如何用正則表達式來做到這一點?

編輯:我不是在尋找一個神奇的子彈來處理每個情況下的每個邊緣案例。我們應該都厭倦了使用正則表達式來解析HTML,但在這種特殊情況下,對於我的特殊需求,正則表達式就是解決方案......我只需要一點幫助即可獲得正確的表達式。

編輯#2: Jens幫助我找到了解決方案,但任何隨機進入此頁面的人都應該考慮使用此解決方案的時間並且非常努力。在我的情況下,它是有效的,因爲我對我將要處理的字符串類型非常有信心。我知道危險和風險,並確保你做到了。如果您不確定是否知道,則可能表示您不知道,也不應該使用此方法。你已被警告。

+2

不會再... O_0 – 2010-03-15 14:49:43

+6

http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags – SLaks 2010-03-15 14:53:03

+0

出於好奇,如果屬性用單引號或雙引號括起來,它有什麼關係? – Amarghosh 2010-03-15 14:53:22

回答

3

這可以通過以下方式進行:我認爲你要替換的"每個實例,這是一個<'一個>之間。

所以,你在你的文件中尋找每個",看看後面的<,並提前>。正則表達式是這樣的:

(?<=\<[^<>]*)"(?=[^><]*\>) 

您可以替換找到的字符,根據自己的喜好,也許使用Regex.Replace

注:雖然我發現堆棧溢出社區最友好和樂於助人,但在我看來,這些正則表達式/ HTML問題的迴應有點過分。畢竟,這裏的這個問題不會問「什麼正則表達式匹配所有有效的HTML,並且不匹配其他任何東西。」

+0

謝謝。我會給這個鏡頭。 – Cindyydnic 2010-03-15 15:00:41

+0

如果你在標籤中的引用字符串內有'>',該怎麼辦?在開始嘗試修改正則表達式以預測每種可能性之前,似乎您可能希望看看http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained -tags – Cascabel 2010-03-15 15:02:02

+0

我犯了一個小錯誤。編輯獲得工作版本。 =) – Jens 2010-03-15 15:04:47

0

可以匹配:

(<div.*?id=)"(.*?)"(.*?>) 

,並替換此:

$1'$2'$3 
0

我看到你知道使用正則表達式做這類替代的危險。如果您希望有一個解決方案能夠隨着輸入文檔的更改而繼續工作,那麼我爲那些尋找更穩定的方法的人添加了以下答案。

使用HTML敏捷性包(project pagenuget),這樣做的伎倆:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("your html here"); 
// or doc.Load(stream); 

var nodes = doc.DocumentNode.DescendantNodes(); 

foreach (var node in nodes) 
{ 
    foreach (var att in node.Attributes) 
    { 
     att.QuoteType = AttributeValueQuote.SingleQuote; 
    } 
} 

var fixedText = doc.DocumentNode.OuterHtml; 
//doc.Save(/* stream */);