2010-11-10 4 views
0

J'essaye de créer un remplacement basé sur Regex pour un article afin de convertir automatiquement les références incorporées (beaucoup d'entre eux) dans les messages dans le format de lien et de titre approprié.Remplacements d'expressions rationnelles multiples en C#

Par exemple, étant donné ceci:

I have already blogged about this topic ((MY TOPIC ID: "2324" "a number of times")) before. And I have also covered ((MY TOPIC ID: "777" "similar topics")) in the past. 

... Je veux obtenir ceci:

I have already blogged about this topic <a href='/post/2324'>a number of times</a> before. And I have also covered <a href='/post/777'>similar topics</a> in the past. 

J'ai actuellement ceci:

/* Does not work */ 
public static string ReplaceArticleTextWithProductLinks(string input) 
{ 
    string pattern = "\\(\\(MY TOPIC ID: \\\".*?\\\" \\\".*?\\\"\\)\\)"; 
    string replacement = "<a href='/post/$1'>$2</a>"; 

    return Regex.Replace(input, pattern, replacement); 
} 

Mais il semble revenir lignes contenant <a href='/post/'></a> sans ajouter de correspondance au lieu de $ 1 et $ 2.

Question: Quelle est la façon la plus simple de convertir la chaîne n ° 1 ci-dessus en chaîne n ° 2 ci-dessus?

Répondre

1

Vous ne capturez pas les parties de l'expression que vous souhaitez extraire. Essayez quelque chose comme ceci:

public static string ReplaceArticleTextWithProductLinks(string input) 
{ 
    string pattern = @"\(\(MY TOPIC ID: ""(.*?)"" ""(.*?)""\)\)"; 
    string replacement = "<a href='/post/$1'>$2</a>"; 

    return Regex.Replace(input, pattern, replacement); 
} 
+1

C# supporte le mécanisme $ 1/$ 2, mais vous avez raison de ne capturer aucun groupe. Si vous mettez à jour votre réponse, je vous voterai. – jordanbtucker

+0

Ah oui, vous avez raison. Je ne sais pas pourquoi je n'ai jamais réalisé cela. Actualisé. – cdhowie

+0

Merci @cdhowie :) –

Questions connexes