Benutzer mit den meisten Antworten
Sonderzeichen aus String entfernen

Frage
-
Hi, mit
sText = System.Text.RegularExpressions.Regex.Replace(sText, "[\.,!?;:]", "")
kann ich ja .;? usw. aus einem String entfernen. Was müßte ich schreiben wenn ich auch so Sonderzeichen entfernen will wie Return, Linefeed,
und alle Zeichen unter chr(30)
gruss
Antworten
-
Hallo Thomas,
das hängt von Deiner Definition von "Sonderzeichen" ab - in Unicode gibt es reichlich viele Zeichen...
Kürzeste Variante wäre "\W", was alle Nichtwortzeichen ausschliesst, siehe Zeichenklassen
wo Du weitere Kombinationen und Unicode-Kategorien für Platzhalter findest.Sollte es sich für oben um eine Pfadangabe handeln, so wäre eine Prüfung mittels
Path. GetInvalidPathChars oder für Dateinamen Path.GetInvalidFileNameChars sinnvoller.Gruß Elmar
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 19. September 2010 11:07
Alle Antworten
-
Hallo Thomas,
diese kleine Funktion sollte dir helfen.
Function SonderzeichenEntfernen(strSource As String) As String Dim i As Integer Dim strTmp As String If IsNull(strSource) Then Exit Function For i = 1 To Len(strSource) Select Case Asc(Mid(strSource, i, 1)) Case 48 To 57, 65 To 90, 97 To 122 strTmp = strTmp & Mid(strSource, i, 1) End Select Next i SonderzeichenEntfernen = strTmp End Function
So kannst du die Funktion deinen Bedüfnissen anpassen, ich habe hier mal alle Sonderzeichen raus geworfen.
Das hier geht in die Funktion rein:
MSDNforPresident*+#_-.;., Hallo du DAAAAAA
und das hier kommt raus:
MSDNforPresidentHalloduDAAAAAA
Ich hoffe ich konnte dir helfen!
-
Hallo Thomas,
das hängt von Deiner Definition von "Sonderzeichen" ab - in Unicode gibt es reichlich viele Zeichen...
Kürzeste Variante wäre "\W", was alle Nichtwortzeichen ausschliesst, siehe Zeichenklassen
wo Du weitere Kombinationen und Unicode-Kategorien für Platzhalter findest.Sollte es sich für oben um eine Pfadangabe handeln, so wäre eine Prüfung mittels
Path. GetInvalidPathChars oder für Dateinamen Path.GetInvalidFileNameChars sinnvoller.Gruß Elmar
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 19. September 2010 11:07
-
Hallo Dennis,
wenn man den Weg ohne RegEx gehen möchte, wäre der Einsatz der Methoden,
die System.Char anbietet, z. B. Char. IsLetterOrDigit oder Char.IsPunctuation (uam.) effizienter.Gruß Elmar
-
Hallo Elmar,
besten Dank für deinen Tip!
Ich habe noch nicht allzu viel mit RegEx Varianten gearbeitet.
Ich habe natürlich in der Funktion mal alle Sonderzeichen ausgeschlossen und wollte damit veranschaulichen, dass man hier wunderbar einzelne Character ausklammern kann.
Alles in allem sind wohl alle genannten Methoden ein Schritt zum Erfolg und somit effektiv, über die Effizienz lässt sich ja bekanntlich streiten. ;-)
Ich finde auf jeden Fall gut, dass du auf vorangegangene Lösungsansätze eingehst!
-
Hallo Dennis,
ich will Deine Lösung nicht "schlecht machen" und
in vielen Fällen ist man auf ähnliches angewiesen.
Häufig schneller als ein RegEx ist solch eine Lösung allemal.Immer dabei bedenken sollte man, dass .NET Zeichenketten mit Unicode arbeiten
und dort existieren laut Wikepedia mehr als 100.000 Zeichen und neue kommen hinzu.
Die Zeiten, wo man mit überschaubaren 8-Bit (Ansi)-Zeichensätzen arbeiten konnte,
sind im Web-Zeitalter vorbei.
So ist der Rückgriff auf Zeichenkategorien , was z. B. auch ohne RegEx über CharUnicodeInfo. GetUnicodeCategory
geht, oftmals einfacher, wenn der Aufgabe angemessen. (Und die Char-Methoden tun das am Ende auch).Gruß Elmar