Je commence à peine à utiliser Regex donc je respecte ma terminologie. J'ai un motif regex qui fonctionne correctement sur une chaîne. La chaîne pourrait être au format "text [pattern] text". Par conséquent, j'ai aussi un motif regex qui annule le premier motif. Si j'imprime les résultats de chacun des matches, tout est affiché correctement.Utilisation de Regex pour modifier une chaîne en C#
Le problème que je vais avoir est que je veux ajouter du texte dans la chaîne et il modifie l'indice des matches dans un MatchCollection regex. Par exemple, si je voulais joindre le match trouvé dans « td » match «/td » » balises je le code suivant:
Regex r = new Regex(negRegexPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
MatchCollection mc = r.Matches(text);
if (mc.Count > 0)
{
for (int i = 0; i < mc.Count; i++)
{
text = text.Remove(mc[i].Index, mc[i].Length);
text = text.Insert(mc[i].Index, "<td>" + mc[i].Value + "</td>");
}
}
Cela fonctionne très bien pour le premier match mais comme on pouvait s'y attendre le. mc [i] .Index n'est plus valide parce que la chaîne a changé.Par conséquent, j'ai essayé de rechercher juste une seule correspondance dans la boucle for pour le nombre de correspondances que je m'attendrais (mc.Count), mais je continue à trouver le premier match.
Alors je l'espère sans introduire plus regex pour vous assurer qu'il n'est pas le premier match et garder tout dans une chaîne, que quelqu'un a une entrée sur la façon dont je pourrais y arriver? Merci pour vos commentaires.
Edit: Merci à tous pour vos réponses, je les apprécie tous.
Juste un petit commentaire. Vous n'avez pas besoin du bloc if (mc.Count> 0). S'il n'y a aucun élément dans la collection, il n'entre pas dans la boucle for de toute façon. – BFree
Un exemple de chaîne de ce que vous avez réellement, et ce que vous voulez avoir pourrait être utile. J'ai le sentiment pas si injustifié que regex est le mauvais outil pour votre tâche. – Tomalak