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.
- 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: .
}
- 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.