Une sorte de confusion groupe de réponses, en partie parce que le titre de la question est en fait beaucoup plus grande que la question précise qui est posée. Après la lecture de travers, je ne suis pas sûr que la réponse est un peu d'éditions à l'écart à partir de l'assimilation de toutes les bonnes choses ici, alors j'ai pensé que j'allais essayer de somme.
Voici une méthode d'extension qui, je pense, évite les écueils mentionnés ici et fournit le plus largement applicable solution.
public static string ReplaceCaseInsensitiveFind(this string str, string findMe,
string newValue)
{
return Regex.Replace(str,
Regex.Escape(findMe),
Regex.Replace(newValue, "\\$[0-9]+", @"$$$0"),
RegexOptions.IgnoreCase);
}
Alors...
Malheureusement, @HA 'commentaire que vous avez à l' Escape
tous les trois n'est pas correct. La valeur initiale et newValue
n'a pas besoin d'être.
Remarque: Vous n'avez, cependant, ont pour échapper $
s dans la nouvelle valeur que vous êtes l'insertion s'ils font partie de ce qui semble être un "capturé" valeur de marqueur. Ainsi, les trois signes dollar dans la Regex.Remplacer dans l'expression rationnelle.Remplacer [sic]. Sans cela, quelque chose comme cela casse...
"This is HIS fork, hIs spoon, hissssssss knife.".ReplaceCaseInsensitiveFind("his", @"he$0r")
Voici l'erreur:
An unhandled exception of type 'System.ArgumentException' occurred in System.dll
Additional information: parsing "The\hisr\ is\ he\HISr\ fork,\ he\hIsr\ spoon,\ he\hisrsssssss\ knife\." - Unrecognized escape sequence \h.
Dites-vous ce que je connais des gens qui y sont à l'aise avec la Regex l'impression que leur utilisation permet d'éviter les erreurs, mais je suis encore souvent partielle à l'octet de renifler des chaînes de caractères (mais seulement après avoir lu Spolsky sur les encodages) pour être absolument sûr que vous obtenez ce que vous avez prévu pour important de cas d'utilisation. Me rappelle de Crockford sur "l'insécurité expressions régulières" un peu. Trop souvent, nous écrire les expressions régulières qui permettent à ce que nous voulons (si on a de la chance), mais involontairement permettre plus (par exemple, Est - $10
vraiment valable "la captation de la valeur" chaîne dans mon newValue regexp, ci-dessus?) parce que nous n'étions pas assez réfléchie. Les deux méthodes ont de la valeur, et à la fois d'encourager les différents types d'erreurs involontaires. Il est souvent facile de sous-estimer la complexité.
Bizarre $
s'échapper (et qu' Regex.Escape
n'a pas échappé à capturé modèles de valeur comme $0
que je me serais attendu à des valeurs de remplacement) m'ont rendu fou pendant un certain temps. La programmation Est Dur (c) 1842