Reguläre Ausdrücke in Go mit Beispielen: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Reguläre Ausdrücke in Go: Ein leistungsstarkes Werkzeug für die Textverarbeitung

Reguläre Ausdrücke (regex) sind ein unverzichtbares Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In der Sprache Go (Golang) wird die Arbeit mit regulären Ausdrücken über das Standardpaket regexp implementiert. Es bietet eine schnelle und sichere Möglichkeit, mit Mustern zu arbeiten, und verwendet eine Syntax, die Perl und RE2 ähnelt. In diesem Artikel werden wir die wichtigsten Funktionen des Pakets anhand praktischer Beispiele erläutern.



1. Grundlagen der Arbeit mit dem Paket regexp

Das Paket regexp

folgt dem Prinzip „Einmal kompilieren, mehrfach verwenden“. Dies verbessert die Leistung bei der wiederholten Anwendung eines Musters. Die wichtigsten Funktionen sind:

  • regexp.Compile(expr) — kompiliert einen regulären Ausdruck. Gibt *Regexp und einen Fehler zurück.
  • regexp.MustCompile(expr) — dasselbe, löst aber bei einem Fehler eine Panik aus. Praktisch für die Initialisierung globaler Variablen.
  • regexp.MatchString(expr, s) — prüft, ob die Zeichenkette s mindestens eine Übereinstimmung mit dem Muster enthält.


package main

import ( "fmt" "regexp")

func main() { // Einfache Prüfung: Enthält die Zeichenkette Ziffern? matched, _ := regexp.MatchString(`\\d+`, "Bestellung Nr. 12345") fmt.Println(matched) // true

// Kompilieren des Musters für die mehrfache Verwendung re := regexp.MustCompile(`[a-z]+`) fmt.Println(re.MatchString("hello")) // true fmt.Println(re.MatchString("HELLO")) // false}


Beachten Sie: Standardmäßig sucht MatchString nach einer teilweisen Übereinstimmung (wie strings.Contains). Für eine vollständige Übereinstimmung der Zeichenkette mit dem Muster verwenden Sie die Anker ^ und $.



2. Suchen und Extrahieren von Daten

Verwenden Sie zum Suchen aller Übereinstimmungen oder des ersten Vorkommens die Methoden FindString, FindAllString, FindStringSubmatch und ihre Entsprechungen für Byte-Slices.



2.1. Suchen der ersten Übereinstimmung

re := regexp.MustCompile(`\\b\\w+@\\w+\\.\\w+\\b`)email := re.FindString("Kontaktieren Sie uns: support@example.com oder info@test.org")fmt.Println(email) // support@example.com


2.2. Suchen aller Übereinstimmungen

re := regexp.MustCompile(`\\d{4}`)numbers := re.FindAllString("Codes: 1234, 5678, 9012", -1)fmt.Println(numbers) // [1234 5678 9012]

Das zweite Argument von FindAllString ist die maximale Anzahl von Übereinstimmungen. -1 bedeutet „alle“.



2.3. Erfassungsgruppen (submatch)

Erfassungsgruppen ermöglichen das Extrahieren von Teilen einer Übereinstimmung. Sie werden mit runden Klammern () definiert.

re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`)match := re.FindStringSubmatch("user@example.com")fmt.Println(match) // [user@example.com user example.com]// match[0] — vollständige Übereinstimmung// match[1] — erste Gruppe (user)// match[2] — zweite Gruppe (example.com)


3. Textersetzung mit regulären Ausdrücken

Das Paket regexp bietet zwei Hauptmethoden für die Ersetzung:

  • ReplaceAllString(src, repl) — ersetzt alle Übereinstimmungen durch die Zeichenkette repl.
  • ReplaceAllStringFunc(src, replFunc) — ersetzt jede Übereinstimmung mithilfe einer Callback-Funktion.


3.1. Einfache Ersetzung

re := regexp.MustCompile(`\\s+`)result := re.ReplaceAllString("Viele   Leerzeichen   hier", " ")fmt.Println(result) // "Viele Leerzeichen hier"


3.2. Ersetzung mit Erfassungsgruppen

In der Ersetzungszeichenkette kann mit $1, $2 usw. auf Gruppen verwiesen werden.

re := regexp.MustCompile(`(\\w+)\\s+(\\w+)`)result := re.ReplaceAllString("Ivan Petrov", "$2, $1")

Blogs

Buchempfehlungen