Heim > Backend-Entwicklung > Golang > Wie kann ich in Go effizient alle überlappenden Musterübereinstimmungen finden?

Wie kann ich in Go effizient alle überlappenden Musterübereinstimmungen finden?

Patricia Arquette
Freigeben: 2024-12-04 10:04:10
Original
787 Leute haben es durchsucht

How Can I Efficiently Find All Overlapping Pattern Matches in Go?

Abgleich überlappender Muster in Golang: Ein umfassender Leitfaden

Angesichts der Einschränkungen des Regexp-Pakets kann der Abgleich überlappender Muster in Go eine Herausforderung darstellen . Dieser Artikel befasst sich mit einem alternativen Ansatz, der die Einfachheit und Effizienz von strings.Index nutzt, um effektiv einen überlappenden Mustervergleich zu erreichen.

Das Problem:

Gegeben eine Zeichenfolge und ein Bei Mustern wie „..#..“ wollen wir alle Instanzen des Musters finden, unabhängig von ihrer Überlappung. Die vorhandene regexp.FindAllStringSubmatchIndex-Methode erfasst nur nicht überlappende Übereinstimmungen.

Die Lösung:

Anstatt uns auf regexp zu verlassen, erstellen wir eine benutzerdefinierte Lösung mit strings.Index und ein für Schleife:

func FindOverlappingPattern(input, pattern string) []int {
    idx := []int{}
    j := 0
    for {
        i := strings.Index(input[j:], pattern)
        if i == -1 {
            break
        }
        fmt.Println(j)
        idx = append(idx, j+i)
        j += i + len(pattern)
    }
    fmt.Println("Indexes:", idx)
    return idx
}
Nach dem Login kopieren

Erklärung:

Diese Funktion sucht iterativ nach dem Muster mithilfe von strings.Index im verbleibenden Teil der Eingabezeichenfolge. Jeder gefundene positive Index wird zur Indexliste hinzugefügt. Die Schleife wird fortgesetzt, bis keine weiteren Übereinstimmungen gefunden werden.

Beispielverwendung:

input := "...#...#....#.....#..#..#..#......."
pattern := "..#.."
result := FindOverlappingPattern(input, pattern)
// result: [1, 10, 16, 22, 29]
Nach dem Login kopieren

Vorteile:

Dieser Ansatz ist unkompliziert und nutzt die nativen String-Suchfunktionen von Go. Es übertrifft Regex-basierte Lösungen hinsichtlich Einfachheit und Effizienz für einfache Mustervergleichsaufgaben.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go effizient alle überlappenden Musterübereinstimmungen finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage