簡體   English   中英

正則表達式僅替換HTML標記中的引號

[英]Regular expression to replace quotation marks in HTML tags only

我有以下字符串:

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

我想使用正則表達式返回以下內容:

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

請注意div中的id屬性現在如何被撇號包圍?

我怎么能用正則表達式做到這一點?

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

編輯#2: Jens為我找到了一個解決方案,但任何隨機訪問此頁面的人都應該考慮使用此解決方案。 在我的情況下,它的工作原理是因為我對我將要處理的字符串類型非常有信心。 我知道危險和風險,並確保你這樣做。 如果你不確定你是否知道它可能表明你不知道也不應該使用這種方法。 你被警告過了。

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

所以,你在你的文件中查找每個"在后面查找< ,然后查找> 。正則表達式如下所示:

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

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

注意:雖然我發現Stack Overflow社區最友好和最有幫助,但在我看來,這些正則表達式/ HTML問題的回答有點過於憤怒。 畢竟,這里的問題不會問“什么正則表達式匹配所有有效的HTML,並且與其他任何內容都不匹配。”

你可以匹配:

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

並將其替換為:

$1'$2'$3

我看到你知道使用正則表達式進行這些替換的危險。 我已經為那些尋找一種更穩定的方法的人添加了以下答案,如果你想要一個能夠隨着輸入文檔的變化而繼續工作的解決方案。

使用HTML Agility Pack( 項目頁面nuget ),這可以解決問題:

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 */);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM