Chaîne de caractères.Remplacer ignorant la casse
J'ai une chaîne de caractères appelée "hello world"
J'ai besoin de remplacer le mot "monde" à "csharp"
pour cela, j'utilise:
string.Replace("World", "csharp");
mais comme un résultat, je ne reçois pas la chaîne à remplacer. La raison est affaire de sensibilité. La chaîne d'origine contient "monde" alors que je suis en train de remplacer "Monde".
Est-il un moyen pour éviter ce cas de sensibilité dans la chaîne.Remplacement de la méthode?
- Ici vous trouverez similaires problème: Est-il une alternative à la chaîne.Remplacer qui est insensible à la casse?
- Double Possible de Est-il une alternative à la chaîne.Remplacer qui est insensible à la casse?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un Regex et d'effectuer un casse remplacer:
hello. world?
ou tout autre contenant regex opérateurs.La Regex.Échapper est utile si vous comptez sur la saisie de l'utilisateur, qui peut contenir Regex éléments de langage
Mise à jour
Grâce à des commentaires, vous avez réellement n'avez pas à échapper à la chaîne de remplacement.
Voici un petit violon qui teste le code:
Sa sortie est:
Regex.Escape
est mauvaise, il faut préfixe caractères spéciaux avec des barres obliques inverses. Semble que le meilleur moyen est .Remplacer("$", "$$"), ce qui est un peu stupide (stackoverflow.com/a/10078353).Extensions de rendre notre vie plus facile:
Beaucoup de suggestions en utilisant les Regex. Comment parler de cette méthode d'extension sans elle:
comparison
paramètre doit être utilisé dansIndexOf
, au lieu deStringComparison.CurrentCultureIgnoreCase
String
avecStringBuilder
. Et d'ajouter manqué commentaires. Consultez le stackoverflow.com/a/45756981/1998097if(old.Equals(@new, comparison)) return @new;
, depuis la nouvelle chaîne de caractères peut varier en majuscules/minuscules.2,5 X plus RAPIDE et PLUS EFFICACE méthode que celle des autres expressions régulières méthodes:
Remarque: ignorer la casse ==
StringComparison.OrdinalIgnoreCase
en tant que paramètre pourStringComparison comparisonType
. Il est le plus rapide, non sensible à la casse pour remplacer toutes les valeurs.Avantages de cette méthode:
avec des expressions régulières (preuve à la fin);
newValue
ànull
), optimisé pour le présent;string.Replace
comportement, même des exceptions;De référence-la preuve: cette solution est 2.59 X fois plus rapide que la regex par @Steve B., code:
Idée originale – @Darky711; merci @MinerR pour
StringBuilder
.String
. Cependant, laStringBuilder
est vraiment plus rapide par 30-40% que leString
. J'ai mis à jour la solution. Merci 😉Vous pouvez utiliser Microsoft.VisualBasic espace de noms à trouver cette fonction d'assistance:
(Édité: n'étais pas au courant de le " nu lien de problème, désolé)
Prises de ici:
Semble que vous n'êtes pas le premier à se plaindre de l'absence de chaîne casse.Remplacer.
Modifié @Darky711 de réponse à utiliser le passé dans un type de comparaison et avec le cadre de remplacer et de nommage xml commentaires aussi étroitement que possible.
J'ai écrit méthode d'extension:
J'utilise deux méthodes d'extension pour la précédente méthode d'extension:
IsNot
est de prendre des extensions trop au sérieux 🙂L'extension de Petrucio's réponse avec
Regex.Escape
sur la chaîne de recherche, et d'échapper groupe apparié, comme suggéré dans Steve B's réponse (et quelques modifications mineures à mon goût):Qui permettra de produire les résultats escomptés suivants:
Cependant sans effectuer les évasions vous obtenez le résultat suivant, qui n'est pas un comportement attendu d'un
String.Replace
c'est juste pas sensible à la casse:Ci-dessous la fonction est d'éliminer tous correspondre à des mots tels que (ce) de la chaîne de la valeur. Par Ravikant Sonare.
Ne fait pas ce travail: je ne peux pas l'imagerie autre chose qu'être beaucoup plus rapide ou plus facile.
À l'aide de @Georgy Batalov solution j'ai eu un problème lors de l'utilisation de l'exemple suivant
chaîne d'origine = "bla,DC=bleh,DC=blih,DC=bloh,DC=com";
chaîne remplacé = original.ReplaceIgnoreCase(",DC=", ".")
Ci-dessous comment j'ai réécrit son extension
ci-dessous est l'alternative pour remplacer la chaîne de ignorant la casse des caractères
Je préfère ce - "Bonjour le Monde".ToLower().Replace( "le monde", "csharp" );