HTMLタグ内の引用符を置き換える正規表現

asp.net c# html-agility-pack regex

質問

私は次の文字列を持っています:

<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:ジェンズは私のための解決策を見つけるのを助けましたが、このページにランダムに来る者は、この解決策を使うことについて長く、非常に懸命に考えるべきです。私の場合、それは私が扱う文字列のタイプを非常に確信しているので機能します。私は危険と危険を知り、あなたがすることを確かめます。あなたがそれを知っているかどうかわからない場合は、おそらくあなたが知らないので、この方法を使用すべきではないことを示します。あなたは警告されています。

受け入れられた回答

これは、以下の方法で行うことができる:私はあなたがのすべてのインスタンスを交換したいと思います" 、それが間にある<>'

だから、あなたは各探し"あなたのファイルで、ために背後に見える< 、および先について>正規表現のように見えます。:

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

あなたは、 Regex.Replaceを使って、見つかった文字を好みのものに置き換えることができます。

注:私はStack Overflowコミュニティが最も親切で役に立つと分かっていましたが、これらのRegex / HTML質問は、私の意見ではあまりにも多くの怒りで答えられます。結局のところ、この質問はここで "正規表現がすべての有効なHTMLにマッチし、他のものにマッチしない"とは問いません。


人気のある回答

私は、これらの置換を行うためにRegexを使用することの危険性を認識していることを知っています。私は、入力文書の変更として機能し続けるソリューションが必要な場合、より安定した方法を探している人には、次の答えを追加しました。

HTMLアジリティパック( プロジェクトページナゲット )を使用すると、これはトリックを行います:

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 with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ