2010-12-29 4 views
1

J'ai été en mesure d'extraire la valeur href des ancres dans une chaîne html. Maintenant, ce que je veux réaliser est d'extraire la valeur href et de remplacer cette valeur par un nouveau GUID. J'ai besoin de renvoyer à la fois la chaîne html remplacée et la liste de la valeur href extraite et son GUID correspondant.Extrait et remplace groupe regex

Merci d'avance.

Mon code existant est comme:

Dim sPattern As String = "<a[^>]*href\s*=\s*((\""(?<URL>[^\""]*)\"")|(\'(?<URL>[^\']*)\')|(?<URL>[^\s]*))" 

Dim matches As MatchCollection = Regex.Matches(html, sPattern, RegexOptions.IgnoreCase Or RegexOptions.IgnorePatternWhitespace) 

If Not IsNothing(matches) AndAlso matches.Count > 0 Then 
    Dim urls As List(Of String) = New List(Of String) 

    For Each m As Match In matches 
     urls.Add(m.Groups("URL").Value) 
    Next 
End If 

Exemple chaîne HTML:

<html><body><a title="http://www.google.com" href="http://www.google.com">http://www.google.com</a><br /><a href="http://www.yahoo.com">http://www.yahoo.com</a><br /><a title="http://www.apple.com" href="http://www.apple.com">Apple</a></body></html> 

Répondre

1

Vous pouvez faire quelque chose comme ça:

Dim pattern As String = "<a[^>]*href\s*=\s*((\""(?<URL>[^\""]*)\"")|(\'(?<URL>[^\']*)\')|(?<URL>[^\s]*))" 
Dim urls As New Dictionary(Of Guid, String) 
Dim evaluator As MatchEvaluator = Function(m) 
    Dim g As Guid = Guid.NewGuid() 
    Dim url = m.Groups("URL").Value 
    urls.Add(g, url) 
    Return m.Value.Replace(url, g.ToString()) 
End Function 

Dim newHtml = Regex.Replace(html, pattern, evaluator) 

En fin de compte, newHtml les éléments suivants sont valeur:

<html><body><a title="329eb2c4-ee51-49fa-a8cd-2de319c3dbad" href="329eb2c4-ee51-49fa-a8cd-2de319c3dbad">http://www.google.com</a><br /><a href="77268e2d-87c4-443c-980c-9188e22f8496">http://www.yahoo.com</a><br /><a title="2941f77a-a143-4990-8ad7-3ef56972a8d4" href="2941f77a-a143-4990-8ad7-3ef56972a8d4">Apple</a></body></html> 

Et le dictionnaire urls contient les entrées suivantes:

329eb2c4-ee51-49fa-a8cd-2de319c3dbad: http://www.google.com 
77268e2d-87c4-443c-980c-9188e22f8496: http://www.yahoo.com 
2941f77a-a143-4990-8ad7-3ef56972a8d4: http://www.apple.com 

Par ailleurs, notez que regular expressions are not the best option for parsing HTML ... Un outil comme HTML Agility Pack serait plus adéquate.

+0

Merde. Seulement remarqué que j'avais dupliqué votre réponse après le fait. +1 :) –