Zeichen löschen, die einem Muster entsprechen

Go:
Zeichen löschen, die einem Muster entsprechen

Wie:

In Go kann das Löschen von Zeichen, die einem Muster entsprechen, effizient mit dem regexp-Paket erreicht werden. Hier zeigen wir, wie man zunächst alle Ziffern und dann alle nicht alphanumerischen Zeichen aus einer Zeichenkette entfernt.

  1. Entfernen aller Ziffern:
package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "Go1 ist cool, aber Go2 wird cooler sein! Jetzt: 2023."
	
    // Kompilieren des regulären Ausdrucks für Ziffern
    re, err := regexp.Compile("[0-9]+")
    if err != nil {
        fmt.Println("Fehler beim Kompilieren des Regex:", err)
        return
    }
	
    // Ersetzen der Ziffern durch einen leeren String
    result := re.ReplaceAllString(text, "")
	
    fmt.Println(result) // Ausgabe: Go ist cool, aber Go wird cooler sein! Jetzt: .
}
  1. Entfernen aller nicht alphanumerischen Zeichen:
package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "Go ist #1 bei Programmiersprachen!"
	
    // Kompilieren des regulären Ausdrucks für nicht alphanumerische Zeichen
    re, err := regexp.Compile("[^a-zA-Z0-9]+")
    if err != nil {
        fmt.Println("Fehler beim Kompilieren des Regex:", err)
        return
    }
	
    // Ersetzen der nicht alphanumerischen Zeichen durch einen leeren String
    result := re.ReplaceAllString(text, "")
	
    fmt.Println(result) // Ausgabe: Goist1beiProgrammiersprachen
}

Tiefere Einblicke

Das regexp-Paket in Go bietet eine leistungsstarke Schnittstelle für Musterabgleich und Manipulation mit regulären Ausdrücken. Seine Implementierung ist von RE2 abgeleitet, einer regulären Ausdrucksbibliothek, die entwickelt wurde, um eine lineare Ausführungszeit zu garantieren und die Möglichkeit von “katastrophalem Zurückverfolgen” zu vermeiden, ein Problem, das in einigen anderen Regex-Engines vorhanden ist. Dies macht Go’s Regex relativ sicher und effizient für eine breite Palette von Anwendungen.

Obwohl das regexp-Paket eine umfassende Lösung für den Umgang mit Mustern ist, ist es erwähnenswert, dass für einfachere oder hochspezifische Zeichenkettenmanipulationen andere Zeichenkettenfunktionen wie strings.Replace(), strings.Trim(), oder das Schneiden leistungsfähigere Alternativen bieten können. Reguläre Ausdrücke sind ein mächtiges Werkzeug, aber ihre relative rechnerische Kosten bedeuten, dass für Operationen, die ohne sie spezifiziert werden können, die Erkundung von Standardbibliotheksalternativen manchmal zu einfacherem und effizienterem Code führen kann.