2009-06-18 6 views
3

J'ai une chaîne qui doit contenir une liste d'éléments dans le formulaire, {0}, {1} et {2} sont des chaînes et je veux essentiellement les extraire. Je veux faire cela pour une partie d'un problème d'analyse HTML, et j'ai entendu dire que l'analyse de HTML avec des expressions régulières est mauvaise. (Comme here)Capture du type rel et href des liens dans C#

Je ne suis même pas sûr de savoir comment faire cela avec des expressions régulières.

Ceci est aussi loin que je suis

string format = "<link rel=\".*\" type=\".*\" href=\".*\">"; 
Regex reg = new Regex(format); 
MatchCollection matches = reg.Matches(input, 0); 
foreach (Match match in matches) 
{ 
     string rel = string.Empty; 
     string type = string.Empty; 
     string href = string.Empty; 
     //not sure what to do here to get these values for each from the match 
} 

Avant mes recherches tournées vers le haut que je pourrais être complètement sur la mauvaise voie en utilisant des expressions régulières.

Comment le feriez-vous avec la méthode que j'ai choisie ou avec un analyseur HTML?

Répondre

0

Vous seriez mieux d'utiliser un véritable analyseur HTML comme le Html Agility Pack. Vous pouvez l'obtenir here. Une raison principale pour ne pas utiliser d'expressions régulières pour l'analyse HTML est qu'elle n'est peut-être pas bien formée (ce qui est presque toujours le cas), ce qui peut casser votre analyseur d'expressions régulières. Vous utiliserez XPath pour obtenir les nœuds dont vous avez besoin et les charger dans des variables.

HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(pageMarkup); 
HtmlNodeCollection nodes = htmlDoc.DocumentNode.SelectNodes("//link"); 
string rel; 

if(nodes[0].Attributes["rel"] != null) 
{ 
    rel = nodes[0].Attributes["rel"]; 
} 
+0

Merci. Je vous donne la coche parce que votre réponse avait un code utile, et vous avez expliqué pourquoi utiliser l'analyseur au lieu d'une regex. Merci aussi à Rony pour le lien vers le pack HTML Agility, je viens de le télécharger. –

1

Parse vous HTML en utilisant la bibliothèque pack Agility HTML, qui se trouve here

+0

Merci pour le lien. –

Questions connexes