Heim >Backend-Entwicklung >Golang >Wie kann ich mit Go effizient überlappende Übereinstimmungen in einer Zeichenfolge finden?

Wie kann ich mit Go effizient überlappende Übereinstimmungen in einer Zeichenfolge finden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 03:55:11234Durchsuche

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Überlappender Mustervergleich in Golang: Eine einfache Lösung

Das Regexp-Paket von Go bietet zwar robuste Funktionen für den Mustervergleich, es fehlt jedoch von Haus aus die Unterstützung für Überlappungen Streichhölzer. Um dies zu beheben, bietet ein einfacher und effizienter Ansatz unter Verwendung der strings.Index-Funktion eine geeignetere Lösung.

Betrachten Sie den folgenden Code:

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)

In diesem Snippet speichert die Variableneingabe die Zielzeichenfolge. Wir initialisieren ein leeres Ganzzahlsegment mit dem Namen idx, um die Startindizes der Musterübereinstimmungen in der Eingabezeichenfolge zu speichern. Die j-Variable verfolgt die aktuelle Position in der Suche.

Der Kern der Lösung liegt in der for-Schleife. Wir rufen wiederholt strings.Index auf, um nach dem Muster „.#..“ zu suchen. Der zurückgegebene Wert i stellt das erste Vorkommen des Musters ab Index j dar. Wenn i nicht -1 ist, haben wir eine Übereinstimmung gefunden und zeichnen ihren Startindex (ji) im idx-Slice auf. Anschließend erhöhen wir j um i 1, um die Suche auf das Zeichen zu verschieben, das auf die Übereinstimmung folgt.

Die Schleife setzt diesen Vorgang fort, bis keine Übereinstimmungen mehr gefunden werden. Anschließend erhalten wir die Liste der Startindizes für alle überlappenden Übereinstimmungen von „.#..“ in der Eingabezeichenfolge.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Go effizient überlappende Übereinstimmungen in einer Zeichenfolge finden?. 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