2009-05-09 3 views

Antwort

2

könnte ich falsch sein, aber ich glaube, Sie einfach die quantifier innerhalb der href Gruppe ändern müssen faul und nicht gierig zu sein.

string pattern = @"<a\s+href\s*=\s*""(?<href>.*?)"">\s*</a>"; 

(ich habe ich verändern auch die Art des Stringliteral @ zu verwenden, zur besseren Lesbarkeit.)

Der Rest der Regex fein ich erscheint. Dass Sie überhaupt keine Übereinstimmungen erfassen, lässt mich anders denken, aber im Rest des Codes könnte ein Problem auftreten (oder sogar die Eingabedaten - haben Sie das verifiziert?).

1

würde ich

string pattern = "(<a\\b[^>]*href=\"([^\"]+)\"[^>]*>)[\\s\\r\\n]*(</a>)"; 

vorschlagen Auf diese Weise mit ihren href Attribut verknüpft auch woanders erfasst würden.

Ersetzen mit

"$1$2$3" 

Die übliche Wort der Warnung: HTML und regex sind im wesentlichen nicht kompatibel. Verwenden Sie mit Vorsicht, dies könnte explodieren.

8

Ich würde nicht einen regulären Ausdruck verwenden - ich Html Agility Pack verwenden würde, und eine Abfrage wie:

foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[.='']")) { 
    link.InnerText = link.GetAttribute("href"); 
} 
+0

+1 für meine tägliche Dosis etwas Neues zu lernen. – womp

+1

+1 für die Vermeidung von ungedeckten Untiefen. – Tomalak

Verwandte Themen