2009-10-22 5 views
0

J'ai le code suivant:RegEx et Replace chaîne de remplacement

Regex.Replace(text, words.ToString(), "<dfn title=\"" + this.FindDefinition("$0") + "\">$0</dfn>", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

Le problème que je vais avoir est la méthode de FindDefinition. Je voudrais envoyer le mot original pour faire une recherche et retourner le texte de la définition. Est-ce possible ou ai-je besoin de créer un modèle comme celui-ci:

Regex.Replace(text, words.ToString(), "<dfn title=\"{$0}\">$0</dfn>", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

puis effectuez une recherche pour le remplacer par ma définition?

J'ai aussi essayé avec:

Regex.Replace(text, words.ToString(), this.ReplaceWord, RegexOptions.IgnoreCase | RegexOptions.Compiled); 

private string ReplaceWord(Match m) 
{ 
    return "<dfn title=\"" + this.FindDefinition(m.Value) + "\">$0</dfn>"; 
} 

Ce qui fonctionne très bien avec la méthode FindDefinition, mais j'ai un problème pour obtenir la valeur d'origine.

Quelque chose me manque?

Répondre

0

Essayez ceci:

return string.Format("<dfn title=\"{0}\">{1}</dfn>", 
        this.FindDefinition(m.Value), 
        m.Value); 
+0

Vous avez bien sûr raison ... J'ai dû faire quelque chose de mal quand j'ai testé cela plus tôt. Merci :). –

0

Vous construisez XML à la main, il est presque toujours simplement faux.

Vous devez utiliser l'évaluateur (mot de remplacement). Pourquoi ne pas faire quelque chose comme:

private string ReplaceWord(Match m) 
{ 
    return "<dfn title=\"" + this.FindDefinition(m.Value) + "\">"+m.Value+"</dfn>"; 
} 

je tendance à utiliser quelque chose comme m.Groups [0] .Value et utiliser le regroupement en regex.

Questions connexes