Ich habe eine Zeichenfolge namens "Hallo Welt"
Ich muss das Wort "Welt" durch "csharp" ersetzen.
dafür benutze ich:
string.Replace("World", "csharp");
Infolgedessen wird die Zeichenfolge jedoch nicht ersetzt. Der Grund ist die Groß- und Kleinschreibung. Die ursprüngliche Zeichenfolge enthält "Welt", während ich versuche, "Welt" zu ersetzen.
Gibt es eine Möglichkeit, diese Fallempfindlichkeit in der string.Replace-Methode zu vermeiden?
Antworten:
Sie können einen Regex verwenden und eine Ersetzung ohne Berücksichtigung der Groß- und Kleinschreibung durchführen:
quelle
hello. world?
oder etwas anderes, das Regex-Operatoren enthält.Die Regex.Escape ist nützlich , wenn Sie auf Benutzereingaben verlassen die Dose enthält Regex Sprachelemente
Aktualisieren
Dank Kommentaren müssen Sie der Ersatzzeichenfolge eigentlich nicht entkommen.
Hier ist eine kleine Geige, die den Code testet :
Seine Ausgabe ist:
quelle
Regex.Escape
ist schlecht, es wird Sonderzeichen Backslashes voranstellen. Der beste Weg scheint .Replace ("$", "$$") zu sein, was ein bisschen dumm ist ( stackoverflow.com/a/10078353 ).2,5X SCHNELLER und EFFEKTIVSTE Methode als die Methoden anderer regulärer Ausdrücke:
Hinweis: Groß- / Kleinschreibung ignorieren ==
StringComparison.OrdinalIgnoreCase
als Parameter fürStringComparison comparisonType
. Dies ist die schnellste Methode, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, um alle Werte zu ersetzen.Vorteile dieser Methode:
newValue
aufnull
), optimiert dafür;string.Replace
-Verhalten, gleiche Ausnahmen;Benchmark- sicher : Diese Lösung ist 2,59- mal schneller als Regex von @Steve B., Code:
Ursprüngliche Idee - @ Darky711; danke @MinerR für
StringBuilder
.quelle
String
. Allerdings ist dasStringBuilder
wirklich 30-40% schneller als dasString
. Ich habe die Lösung aktualisiert. Danke;)Erweiterungen erleichtern unser Leben:
quelle
Viele Vorschläge mit Regex. Wie wäre es mit dieser Erweiterungsmethode ohne:
quelle
comparison
Parameter sollte inIndexOf
anstelle vonStringComparison.CurrentCultureIgnoreCase
if(old.Equals(@new, comparison)) return @new;
, da sich die neue Zeichenfolge in Groß- / Kleinbuchstaben unterscheiden kann.Sie können den Microsoft.VisualBasic- Namespace verwenden, um diese Hilfsfunktion zu finden:
quelle
( Bearbeitet: Das Problem mit dem "nackten Link" war mir nicht bekannt. Tut mir leid.)
Von hier genommen :
Sie scheinen nicht der erste zu sein, der sich über das Fehlen einer Zeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung beschwert.
quelle
Die Antwort von @ Darky711 wurde geändert, um den übergebenen Vergleichstyp zu verwenden und mit dem Framework übereinzustimmen. Ersetzen Sie Namens- und XML-Kommentare so genau wie möglich.
quelle
Ich habe eine Erweiterungsmethode geschrieben:
Ich verwende zwei zusätzliche Erweiterungsmethoden für die vorherige Erweiterungsmethode:
quelle
IsNot
nimmt Erweiterungen zu ernst :).IsNot
Erweitern Sie die Antwort von Petrucio mit
Regex.Escape
in der Suchzeichenfolge und entkommen Sie der übereinstimmenden Gruppe, wie in Steve Bs Antwort vorgeschlagen (und einige geringfügige Änderungen an meinem Geschmack):Welches wird die folgenden erwarteten Ergebnisse produzieren:
Ohne die Escape-Aktionen würden Sie jedoch Folgendes erhalten, was kein erwartetes Verhalten von einem
String.Replace
ist, bei dem nur die Groß- und Kleinschreibung nicht berücksichtigt wird:quelle
Funktioniert das nicht: Ich kann mir nichts anderes vorstellen, das viel schneller oder einfacher ist.
quelle
Die folgende Funktion besteht darin, alle Übereinstimmungswörter wie diese aus dem Zeichenfolgensatz zu entfernen. Von Ravikant Sonare.
quelle
Bei Verwendung der @ George Batalov-Lösung hatte ich ein Problem bei der Verwendung des folgenden Beispiels
Zeichenfolge original = "bla, DC = bleh, DC = blih, DC = bloh, DC = com"; Zeichenfolge ersetzt = original.ReplaceIgnoreCase (", DC =", ".")
Unten ist, wie ich seine Erweiterung umgeschrieben habe
quelle
Im Folgenden finden Sie die Alternative zum Ersetzen von Zeichenfolgen, bei denen die Groß- und Kleinschreibung ignoriert wird
quelle
Sie können auch die
Regex
Klasse ausprobieren .var regex = new Regex( "camel", RegexOptions.IgnoreCase ); var newSentence = regex.Replace( sentence, "horse" );
quelle
Ich bevorzuge dies - "Hallo Welt" .ToLower (). Ersetzen ("Welt", "csharp");
quelle