2010-03-13 4 views
1

J'ai une chaîne HTML et je veux remplacer tous les liens par un simple texte.Quelle regex dois-je utiliser pour supprimer les liens du code HTML en C#?

E.g. ayant

Some text <a href="http://google.com/">Google</a>. 

besoin d'obtenir

Some text Google. 

Que regex dois-je utiliser?

+4

D'une manière générale * (et probablement vrai dans ce cas) *, vous ne devriez pas utiliser regex pour « analyser » HTML et y travailler; à la place, vous devriez utiliser un outil pour manipuler votre document HTML via le DOM. –

+0

"Comment analyser HTML avec une expression rationnelle" est probablement dans le top 10 des questions posées sur SO. La réponse est: Vous n'avez pas – erikkallen

+1

Il contient la réponse la mieux votée qui est à coup sûr! - http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

Répondre

1
var html = "<a ....>some text</a>"; 
var ripper = new Regex("<a.*?>(?<anchortext>.*?)</a>", RegexOptions.IgnoreCase); 
html = ripper.Match(html).Groups["anchortext"].Value; 
//html = "some text" 
2

Plusieurs questions similaires ont été postées et la meilleure pratique consiste à utiliser Html Agility Pack qui est spécialement conçu pour réaliser ce genre de choses.

http://www.codeplex.com/htmlagilitypack

+0

+1 cette réponse. ' ...' échouera même pour du HTML simple et valide. Autoriser '. *?' Est naïf même par les normes basses et basses de regex; par exemple, une simple différence comme le close-tag étant '' et vous venez de faire correspondre une grande partie du document sur plusieurs liens par erreur. Plus, bien sûr, la centaine d'autres constructions qui vont trébucher. Fais-toi plaisir. Utilisez un analyseur HTML. C'est ce qu'ils sont là pour ça. – bobince

1

j'ai demandé regex simple (merci Fabrian). Le code sera le suivant:

var html = @"Some text <a href="http://google.com/">Google</a>."; 
Regex r = new Regex(@"\<a href=.*?\>"); 
html = r.Replace(html, ""); 
r = new Regex(@"\</a\>"); 
html = r.Replace(html, ""); 
+0

Bienvenue. Donc, je suppose que c'est ce que vous vouliez alors? Si vous acceptez la réponse, ne perdez pas de temps à poster plus de réponses –

+0

cela ne gère pas le cas où le tag a un attribut différent (c'est-à-dire le titre) avant href. Voir ma réponse ci-dessous. –

+0

Oui, vous avez raison. – sashaeve

Questions connexes