Bessere Möglichkeit, Zeichen zu entfernen, die nicht ASCII 32 bis 175 C # sind

7

Ich muss Zeichen aus einer Zeichenfolge entfernen, die nicht im Ascii-Bereich von 32 bis 175 liegen, alles andere muss entfernt werden.

Ich weiß nicht gut, ob RegExp die beste Lösung sein kann, anstatt etwas wie .replace () oder .remove () zu verwenden, um jedes ungültige Zeichen oder etwas anderes einzufügen.

Jede Hilfe wird geschätzt.

    
FabianSilva 18.07.2012, 14:17
quelle

5 Antworten

16

Sie können

verwenden %Vor%

Die Regex besteht hier aus einer Zeichenklasse ( [...] ) bestehend aus allen Zeichen nicht ( ^ zu Beginn der Klasse) im Bereich von U + 0020 bis U + 00AF (32-175, ausgedrückt in hexadezimaler Schreibweise). Soweit reguläre Ausdrücke gehen, ist dies eine ziemlich einfache, aber kann jemand rätseln, der nicht sehr vertraut mit ihm ist.

Aber Sie können auch eine andere Route gehen:

%Vor%

Das hängt wahrscheinlich hauptsächlich davon ab, was Sie mit Lesen besser können. Ohne viel Regex-Erfahrung würde ich sagen, dass die zweite klarer wäre.

Einige Leistungsmessungen, jeweils 10000 Runden in Sekunden:

%Vor%

Also, meine Ansätze sind die langsamsten :-). Sie sollten wahrscheinlich mit der Antwort von xanatos gehen und diese in eine Methode mit einem schönen, klaren Namen einfügen. Für Inline-Nutzung oder schnell-und-schmutzig-Dinge oder wo Leistung spielt keine Rolle, würde ich wahrscheinlich die Regex.

    
Joey 18.07.2012, 14:18
quelle
7

Weil ich denke, dass, wenn Sie nicht wissen, wie man eine Regex schreibt, Sie sie nicht verwenden sollten, besonders für etwas so einfaches:

%Vor%     
xanatos 18.07.2012 14:21
quelle
3

Verwenden Sie regex [^\x20-\xAF]+ und ersetzen Sie es durch die leere Zeichenfolge ""

%Vor%     
Ωmega 18.07.2012 14:20
quelle
1

Wie wäre es mit linq auf diese Weise?

%Vor%     
HatSoft 18.07.2012 14:37
quelle
1
%Vor%     
Feng Yuan 19.07.2012 04:09
quelle

Tags und Links