這是我的後續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 2009-09-14 17:26:01
[可以提供一些爲什麼很難用正則表達式分析XML和HTML的例子嗎?](http:// stackoverflow。com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a-rege) – 2011-07-09 20:54:05
[RegEx match open標籤除XHTML自包含標籤](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – 2011-09-15 14:15:52