2010-05-15 9 views
0

J'ai une chaîne de HTML dont j'ai besoin pour saisir le motif "[Title | http://www.test.com]" par exemple.RegEx remplace la requête pour choisir la syntaxe du wiki

"dafasdfasdf, adfasd [Test | http://www.test.com/] ddasfasdf adf [SDAF | http://www.madee.com/] ad assg"

Je dois remplacer "[Titre | http://www.test.com]" avec « http://www.test.com/ » > Titre ".

Quel est le meilleur moyen de s'en approcher?

Je devenais étroite avec:

string test = "dafasdfasdf adfasd [Test|http://www.test.com/] adf ddasfasdf [SDAF|http://www.madee.com/] assg ad "; 
     string p18 = @"(\[.*?|.*?\])"; 
     MatchCollection mc18 = Regex.Matches(test, p18, RegexOptions.Singleline | RegexOptions.IgnoreCase); 
     foreach (Match m in mc18) 
     { 
      string value = m.Groups[1].Value; 
      string fulltag = value.Substring(value.IndexOf("["), value.Length - value.IndexOf("[")); 
      Console.WriteLine("text=" + fulltag); 
     } 

Il doit y avoir un moyen plus propre d'obtenir les deux valeurs en exemple le bit "Titre" et l'URL elle-même.

Des suggestions?

+0

Veuillez ajouter un tag pour la langue que vous utilisez. – Gumbo

Répondre

2

Remplacer le motif:

\[([^|]+)\|[^]]*] 

avec:

$1 

Une brève explication:

\[   # match the character '[' 
(   # start capture group 1 
    [^|]+ # match any character except '|' and repeat it one or more times 
)   # end capture group 1 
\|   # match the character '|' 
[^]]*  # match any character except ']' and repeat it zero or more times 
]   # match the character ']' 

A C# demo ressemblerait à ceci:

string test = "dafasdfasdf adfasd [Test|http://www.test.com/] adf ddasfasdf [SDAF|http://www.madee.com/] assg ad "; 
string adjusted = Regex.Replace(test, @"\[([^|]+)\|[^]]*]", "$1"); 
+0

excellent merci, j'ai étendu ce un peu plus loin pour obtenir 2 $ pour l'URL Regex.Replace (bodyText, @ "\ [([^ |] +) \ | ([^]] *)]", "$1") ; –

+0

@Jeremy, je vous en prie. –

Questions connexes