2010-05-20 2 views
0

Je cette html:Vous avez besoin d'rapide C# regex aide

<a href="http://www.site.com/">This is the content.</a> 

J'ai juste besoin de se débarrasser de la balise HTML d'ancrage autour du texte de contenu, de sorte que tout ce que je finis avec est « Ceci est le contenu ". Puis-je le faire avec Regex.Replace?

Répondre

2

Votre regex: <a[^>]+?>(.*?)</a>

Cocher cette Regex avec le Regex -class et itérer à travers la collection de résultat et vous devriez obtenir votre texte intérieur.

String text = "<a href=\"link.php\">test</a>"; 

Regex rx = new Regex("<a[^>]+?>(.*?)</a>"); 
// Find matches. 
MatchCollection matches = rx.Matches(text); 

// Report the number of matches found. 
Console.WriteLine("{0} matches found. \n", matches.Count); 

// Report on each match. 
foreach (Match match in matches) 
{ 
    Console.WriteLine(match.Value); 

    Console.WriteLine("Groups:"); 
    foreach (var g in match.Groups) 
    { 
     Console.WriteLine(g.ToString()); 
    } 
} 

Console.ReadLine(); 

sortie:

1 matches found. 
    <a href=\"link.php\">test</a> 
    Groups: 
    <a href=\"link.php\">test</a> 
    test 

L'expression de correspondance dans () est stocké dans le deuxième article de la collection de Groupsmatch (le premier élément est lui-même l'ensemble du jeu). Chaque expression de () entre dans la collection Groups. Voir le MSDN pour plus d'informations.

+1

Vous pouvez également remplacer l'utilisation du groupe par index au lieu de parcourir tous les résultats, par ex. Regex.Replace (yourHtml, "] +?> (. *?)", "$ 1"); retournerait le texte intérieur. –

+0

Cool, ne savait pas! :) – Simon

+0

Merci, cela a fonctionné. – Steven

0

Si vous deviez utiliser Remplacer, travailler this'd pour le contenu de chaîne simple dans la balise:

Regex r = new Regex("<[^>]+>"); 
string result = r.Replace(@"<a href=""http://www.site.com/"">This is the content.</a>", ""); 
Console.WriteLine("Result = \"{0}\"", result); 

Bonne chance

-1

Vous pouvez également utiliser des groupes dans Regex. Par exemple, ce qui suit vous donnerait le contenu de n'importe quelle étiquette.

 Regex r = new Regex(@"<a.*>(.*)</a>"); 
     // Regex r = new Regex(@"<.*>(.*)</.*>"); or any kind of tag 

     var m = r.Match(@"<a href=""http://www.site.com/"">This is the content.</a>"); 

     string content = m.Groups[1].Value; 

vous utilisez des groupes dans regexes en utilisant la parenthèse, bien que le groupe 0 est tout le match, pas seulement le groupe.

+0

Votre expression régulière ne fonctionnera pas dans tous les cas. Par exemple si vous avez test1 test2 ... vous obtiendrez toujours test2 – Simon

+0

Ouais mais ce n'est pas comme l'exemple qu'il a utilisé, il a fait croire qu'il ne va traiter qu'une seule étiquette imbriquée à la fois –

Questions connexes