二重引用符で囲まれた二重引用符を置き換えるhtml属性

c# html html-agility-pack regex replace

質問

私のクライアントが、正しく構造化されていない要素の属性を持つhtml文字列を送ってくるケースがいくつかあります。このような:

<img src="../imgTest.jpg" alt="Something "quoted here, or here"">

これらのケースを次のように動的に変更するにはどうすればよいですか?

<img src="../imgTest.jpg" alt="Something 'quoted here, or here'">

私はこのHTMLをブラウザに表示するのではなく、いくつかの操作を行う必要があります。

私はHtmlAgilityPackを使用してhtmlの問題をコントロールしていますが、これらの場合、html文字列がこれに変更されてしまいます。

<img src="../imgTest.jpg" alt="Something" quoted="" here,="" or="" here="">

HtmlAgilityPackのコード:

var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(myHtmlStr);

var htmlError = htmlDoc.ParseErrors.SafeAny();

if (!htmlError)
    myHtmlStr = htmlDoc.DocumentNode.InnerHtml;

受け入れられた回答

私の考えは、AA一致させることです"それはタグ内で、属性ではない場合Âをqualifier.Â

免責事項:このソリューションは100%のケースでは機能しないかもしれません(要素/属性名に名前空間が追加されている場合には適合が必要です)が、タグ名が<直後にある場合は機能します。属性の中に<シンボルはありません。

つかいます

(?<=<\w+\b[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")

そして、withÂを交換してください'

正規表現のデモを参照してください。

最初のlookbehindは二重引用符がタグを表示していることを保証します。二重引用符は、二重引用符の直前に等号が続く単語があれば一致しません。二重引用符が続くと否定の先読みが失敗します。空白の後ろに閉じ括弧(おそらく前方スラッシュが付いています)または空白の後に単語の後に等号が続く場合です。




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