Wie entferne ich alle nicht alphanumerischen Zeichen aus einer Zeichenfolge mit Ausnahme von Bindestrich- und Leerzeichen?
606
Durch [^a-zA-Z0-9 -]
eine leere Zeichenfolge ersetzen .
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");
-
dies am Ende der Zeichenklasse oder mit einem Backslash erfolgen muss, um zu verhindern, dass es für einen Bereich verwendet wird.replaceAll
Funktion anstelle vonreplace
.return Regex.Replace(str, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled);
Gleiche grundlegende Frage""
&string.Empty
genau das gleiche. stackoverflow.com/questions/151472/…Ich hätte RegEx verwenden können, sie können eine elegante Lösung bieten, aber sie können Leistungsprobleme verursachen. Hier ist eine Lösung
Bei Verwendung des kompakten Frameworks (das nicht über FindAll verfügt)
Ersetzen Sie FindAll durch 1
1 Kommentar von ShawnFeatherly
quelle
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-')).ToArray();
Du kannst es versuchen:
Wo
s
ist deine Schnur?quelle
Verwenden von System.Linq
quelle
Der reguläre Ausdruck ist
[^\w\s\-]*
:\s
ist besser als space () zu verwenden, da der Text möglicherweise eine Registerkarte enthält.
quelle
Basierend auf der Antwort auf diese Frage habe ich eine statische Klasse erstellt und diese hinzugefügt. Dachte, es könnte für einige Leute nützlich sein.
Dann können die Methoden verwendet werden als:
quelle
Willst du etwas schnelles?
Auf diese Weise können Sie angeben, welche Zeichen Sie ebenfalls zulassen möchten.
quelle
Hier ist eine nicht regex Heap Allocation freundliche schnelle Lösung, nach der ich gesucht habe.
Unsichere Ausgabe.
Und für diejenigen, die nicht unsicher verwenden wollen oder dem String-Länge-Hack nicht vertrauen.
quelle
Ich habe eine andere Lösung gefunden, indem ich die Steuerzeichen entfernt habe , was mein ursprüngliches Problem war.
Es ist besser, als alle "besonderen, aber guten" Zeichen in eine Liste aufzunehmen
es ist einfacher, also denke ich es ist besser!
quelle
Hier ist eine Erweiterungsmethode, bei der @ata answer als Inspiration verwendet wird.
oder wenn Sie zusätzliche Zeichen außer Bindestrich benötigen ...
quelle
Ich verwende hier eine Variation einer der Antworten. Ich möchte Leerzeichen durch "-" ersetzen, damit es SEO-freundlich ist und auch Kleinbuchstaben enthält. Auch nicht auf system.web aus meiner Serviceschicht verweisen.
quelle
Hier ist eine sehr knappe Version
quelle
Mit Regex gibt es einen viel einfacheren Weg.
quelle