2017-05-01 119 views
1

我使用vb.net刪除HTML屬性和我的數據庫返回這樣的字符串很長的title屬性,我想刪除:正則表達式完全從元素

<img title="3497fh-39848f-04ghk38-483728_part1__book1_93822-3948329928" 

我想這正則表達式:

<?(title).*?"^*? 

但它只是獲得「title =」部分。我怎樣才能找到引號之間的標題和其他所有內容?

這裏是一個Regex Tester link

我要完全刪除title屬性。

謝謝!

+2

您確定不想使用HTML解析器來解析HTML嗎? https://www.nuget.org/packages/HtmlAgilityPack – Ryan

+0

@Ryan我其實已經安裝了。這將如何更容易地刪除標題屬性?謝謝 – SkyeBoniwell

+0

所以你想刪除標題標籤和其中的所有內容嗎? – Codexer

回答

0

試試這個Regex ...有關此Regex的更多信息,請參閱here

<?(title)="[^"]*" 
1

只有在語法不正確且沒有其他庫可以處理的情況下,您才應該使用正則表達式來操縱HTML。

隨着HtmlAgilityPack(安裝NuGet包),你可以很容易地得到所有a標籤,並從中取出title屬性是這樣的:

Dim s = "<img title=""3497fh-39848f-04ghk38-483728_part1__book1_93822-3948329928"">" 
Dim doc As HtmlDocument = New HtmlDocument() 
doc.LoadHtml(s) 
RemoveAttributeFromTag(doc, "title") 
Debug.Print(doc.DocumentNode.OuterHtml) 

RemoveAttributeFromTag之中:

Private Sub RemoveAttributeFromTag(html As HtmlDocument, AttName As String) 
    Dim elements = html.DocumentNode.SelectNodes("//@" + AttName) 
    For Each element In elements 
     element.Attributes.Remove(AttName) 
    Next 
End Sub 

這版畫<img>enter image description here

最後的意思度假村的解決方案是

Regex.Replace(str, "(?<=<[_a-zA-Z][^<]*?)\s+style=""[^""]*""", "") 

其中

  • (?<=<[_a-zA-Z][^<]*?) - 積極的回顧後,確保/要求立即到當前位置的左邊,有<,然後ASCII字母或_後面加上任意0比<等,儘可能少+字符,可以發現
  • \s+ - 1+空格
  • style=" - 字面style="
  • [^"]* - 0+比"
  • "其他字符 - 最終"

regex demo