Heim >Backend-Entwicklung >Golang >Wie kann ich einen negativen Lookbehind in regulären Go-Ausdrücken simulieren?

Wie kann ich einen negativen Lookbehind in regulären Go-Ausdrücken simulieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 12:59:10770Durchsuche

How Can I Simulate Negative Lookbehind in Go Regular Expressions?

Negative Lookbehind-Simulation in Go

In Go werden negative Lookbehind-Behauptungen aus Leistungsgründen nicht unterstützt. Dies kann beim Versuch, Muster mithilfe von Lookbehind-Operatoren abzugleichen, zu Herausforderungen führen.

Zum Beispiel könnte ein negativer Lookbehind verwendet werden, um einen Befehl aus einer Zeichenfolge zu extrahieren, wobei alle führenden Zeichen aus dem Satz [@#/] ausgeschlossen werden. Verwendung einer negativen Lookbehind-Behauptung:

\b(?<![@#\/])\w.*

Diese Regex lässt sich jedoch nicht in Go kompilieren, da die negative Lookbehind-Behauptung nicht unterstützt wird.

Alternativer Ansatz

Stattdessen können wir das negative Lookbehind durch einen negierten Zeichensatz ersetzen, der mit jedem Zeichen übereinstimmt, das nicht im enthalten ist gesetzt.

Aktualisierte Regex:

\b[^@#/]\w.*

Wenn führende Zeichen aus der Menge [@#/] am Anfang der Zeichenfolge zulässig sind, können wir die verwenden ^ Anker:

(?:^|[^@#\/])\b\w.*

Filterfunktion

Alternativ können wir verwenden eine Filterfunktion in Go, um Zeichenfolgen herauszufiltern, die mit Zeichen aus der Menge [@#/] beginnen.

func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}

Prozessfunktion

Wir können auch eine erstellen Prozessfunktion, die die Filterfunktion nutzt:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &&
               strings.Index(x, "@") != 0 &&
               strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}

Diese Prozessfunktion kann verwendet werden, um Eingabezeichenfolgen zu transformieren und alle Wörter, die mit Zeichen beginnen, aus der Menge zu entfernen [@#/].

Das obige ist der detaillierte Inhalt vonWie kann ich einen negativen Lookbehind in regulären Go-Ausdrücken simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn