Rubrik: Variablen/Strings · String-Operationen | VB-Versionen: VB6, VBA | 03.08.15 |
Beliebige Zeichen aus einem String entfernen Mit Hilfe von regulären Ausdrücken lassen sich aus einem String beliebige Zeichen in einem Rutsch entfernen. | ||
Autor: Dieter Otter | Bewertung: | Views: 17.313 |
www.tools4vb.de | System: WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Soll ein einzelnes bestimmtes Zeichen aus einem String entfernt werden, verwendet man i.a.R. die Replace-Methode:
Dim sText As String sText = "Hallo, wie geht's?" ' Komma (,) aus dem String entfernen sText = Replace(sText, ",", "")
Muss man mehrere Zeichen, die sich an beliebiger Stelle befinden, entfernen, müsste man die Replace-Funktion mehrfach aufrufen:
Dim sText As String sText = "Hallo, wie geht's?" ' Komma (,) und Fragezeichen (?) aus aus dem String entfernen sText = Replace(sText, ",", "") sText = Replace(sText, "?", "")
Will man bspw. alle Satzzeichen aus einem String entfernen, müsste man die Replace-Funktion x-mal aufrufen! Das kostet Zeit, zumal die Replace-Funktion ggf. unnötig aufgerufen wird, falls im String bestimmte Satzzeichen gar nicht vorhanden sind!
Dim sText As String sText = "Hallo, wie geht's?" ' alle Satzzeichen entfernen sText = Replace(sText, ",", "") sText = Replace(sText, ".", "") sText = Replace(sText, ";", "") sText = Replace(sText, "!", "") sText = Replace(sText, "?", "") ' usw.
Für diese und ähnliche Zwecke sollte gibt es aber auch die "regulären Ausdrücke". Um reguläre Ausdrücke anwenden zu können, müssen Sie dem Projekt einen Verweis auf Microsoft VBScript Regular Expressions 5.x hinzufügen oder Sie verwenden Late-Binding, wie in unserem Tipp.
Dim sText As String sText = "Hallo, wie geht's?" ' RegExp via Late-Bindung instanzieren Dim oRegExp As Object Set oRegExp = CreateObject("VBScript.RegExp") With oRegExp .IgnoreCase = True .Global = True .MultiLine = True .Pattern = "[\.,!?;:]" ' alle nicht zulässigen Zeichen ersetzen sText = .Replace(sText, "") End With Set oRegExp = Nothing
Die zu ersetzenden Satzzeichen befinden sich hierbei allesamt in der Eigenschaft Pattern nach [\ und vor dem anschließenden ] Zeichen. In obigen Fall werden demnach die Zeichen ".,!?;:" aus dem String entfernt.
Um das Ganze ein wenig universeller einsetzbar zu machen, verpacken wir die "Ersetzen-/Löschfunktion" in eine eigene kleine Funktion, bei der sich über einen optionalen Parameter noch ein Zeichen angeben lässt, mit dem die unzulässigen Zeichen ersetzt werden sollen. Standardmäßig wird eine leere Zeichenkette angenommen, so dass die unzulässigen Zeichen aus dem String entfernt werden.
' beliebige Zeichen entfernen / ersetzen Public Function RemoveChars(ByVal Source As String, ByVal Chars As String, _ Optional ByVal ReplaceWith As String = "") As String ' RegExp via Late-Bindung instanzieren Dim oRegExp As Object ' RegExp Set oRegExp = CreateObject("VBScript.RegExp") With oRegExp .IgnoreCase = True .Global = True .MultiLine = True .Pattern = "[\" & Chars & "]" ' alle nicht zulässigen Zeichen ersetzen RemoveChars = .Replace(Source, ReplaceWith) End With Set oRegExp = Nothing End Function
Beispiel:
Dim sText As String sText = "Hallo, wie geht's?" ' alle Satzzeichen entfernen sText = RemoveChars(sText, ".,!?;:")