none
Sonderzeichen aus String entfernen RRS feed

  • 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

    Donnerstag, 2. September 2010 06:46

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

    Donnerstag, 2. September 2010 09:03
    Beantworter

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!

    Donnerstag, 2. September 2010 08:05
  • 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

    Donnerstag, 2. September 2010 09:03
    Beantworter
  • 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

    Donnerstag, 2. September 2010 09:11
    Beantworter
  • 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!

    Donnerstag, 2. September 2010 09:22
  • 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

    Donnerstag, 2. September 2010 10:36
    Beantworter