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
regexp.Compile(expr)— kompiliert einen regulären Ausdruck. Gibt*Regexpund 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 Zeichenkettesmindestens 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.com2.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 Zeichenketterepl.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")