2012-09-06 5 views
1

Je suis en train de remplacer une URL existante dans un texte donné par une nouvelle URL en utilisant regex. Je ne semble pas obtenir des résultats pour le motif regex J'utilise:Remplacer une URL existante dans un texte donné avec une nouvelle URL en utilisant Regex

string regex = "<a href=\"http://domain/page.asp?id=(\\d+)&amp;oid=(\\d+)&amp;type=(\\w+)\">"; 

Quelqu'un peut-il s'il vous plaît me aider écrire un bon modèle pour trouver urls qui ressemblent à:

"<A href=\"http://domain/page.asp?id=38957&amp;oid=2497&amp;type=JPG\">" 

Ci-dessous mon code de test qui ne peut pas trouver des correspondances pour le motif que je utilise:

string result = string.Empty; 

string sampleText = "<A href=\"http://domain/page.asp?id=38957&amp;oid=2497&amp;type=JPG\"><U>Click here for Terms &amp; Conditions...</U></A>"; 

string regex = "<a href=\"http://domain/page.asp?id=(\\d+)&amp;oid=(\\d+)&amp;type=(\\w+)\">"; 
     Regex regEx = new Regex(regex, RegexOptions.IgnoreCase); 

result= regEx.Replace(text, "<a href=\"/newPage/Index/$1&opid=$2)\">"); 
+0

"ne peut pas le faire fonctionner" n'est pas très descriptif. Qu'est-ce qui ne fonctionne pas? Les erreurs? Des exceptions? S'il vous plaît, postez ce que vous attendez de ce qui se passe. – Oded

+1

Très difficile de choisir un duplicata exact dans la liste 'related'. Cependant, n'utilisez pas Regex, utilisez [Html Agility Pack] (http://htmlagilitypack.codeplex.com/) – Steve

+0

Ce que dit @Steve, en conjonction avec le ['Uri'] (http://msdn.microsoft. com/fr-fr/library/system.uri.aspx) classe pour analyser les URL une fois que vous les obtenez en utilisant le HAP. – Oded

Répondre

1

tout semble bien, sauf que . et ? sont des caractères spéciaux dans les expressions régulières, ils doivent donc être évadés pour être traités comme des littéraux. Ainsi, votre expression:

string regex = "<a href=\"http://domain/page.asp?id=(\\d+)&amp;oid=(\\d+)&amp;type=(\\w+)\">"; 

doit être:

string regex = "<a href=\"http://domain/page\\.asp\\?id=(\\d+)&amp;oid=(\\d+)&amp;type=(\\w+)\">"; 

Notez la barre oblique inverse devant la . et ?.

Questions connexes