これは、another questionのフォローアップです。私が見つけた解決策は、私がそれを投げたすべてのテストケースで素晴らしい結果を出しました。HTMLタグの置き換え正規表現が正しく動作していない
私の目標は、正規表現を使用して不適切な形式のタグ属性を再フォーマットすることです(私が知っている、おそらく私が見つけているが、私と一緒に耐えられない偽の方法ではない)。
マイ機能:
Public Function ConvertMarkupAttributeQuoteType(ByVal html As String) As String
Dim findTags As String = "</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>"
Return Regex.Replace(html, findTags, AddressOf EvaluateTag)
End Function
Private Function EvaluateTag(ByVal match As Match) As String
Dim attributes As String = "\s*=\s*(?:(['""])(?<g1>(?:(?!\1).)*)\1|(?<g1>\S+))"
Return Regex.Replace(match.Value, attributes, "='$2'")
End Function
EvaluateTag
機能で正規表現が正しく変換されますHTML
<table border=2 cellpadding='2' cellspacing="1">
<table border='2' cellpadding='2' cellspacing='1'>
に
のようなあなたは、私は、属性値を強制的にしていますがわかります一重引用符で囲まれている - それについて心配しないでください。それが壊れた場合は、 最後の属性値の周囲に何もない場合です。<table width=100 border=0>
誤っタグの外に最後の単一引用符で
<table width='100' border='0>'
として置き換える正規表現が出てきます。私は前に、私は正規表現がまったくよくないと告白しました。私はそれができるすべてを理解する時間をとっていない。だから、この最後のケースを扱うことができるように、EvaluateTag
正規表現を調整する助けを求めています。
ありがとうございました!
あなたは、HTMLクリーニングツール(他の質問で示唆されているようにda8)を使用する方が良いでしょうか、または寛容なDOMでHTMLを解析して再エクスポートする方が良いでしょう。 – TrueWill
[XMLとHTMLを正規表現で解析するのが難しい理由のいくつかの例を提供できますか?](http:// stackoverflow。com/questions/701166/can-you-provide-some-examples-of-the-is-parse-xml-and-a-rege) –
[RegEx match open XHTML自己完結型タグを除くタグ](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –