Maison > développement back-end > Golang > Comment puis-je trouver efficacement des correspondances qui se chevauchent dans une chaîne à l'aide de Go ?

Comment puis-je trouver efficacement des correspondances qui se chevauchent dans une chaîne à l'aide de Go ?

Patricia Arquette
Libérer: 2024-12-22 03:55:11
original
243 Les gens l'ont consulté

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

Correspondance de modèles avec chevauchement dans Golang : une solution simple

Bien que le package d'expressions rationnelles de Go offre des fonctionnalités robustes pour la correspondance de modèles, il manque nativement de prise en charge du chevauchement matchs. Pour résoudre ce problème, une approche simple et efficace utilisant la fonction strings.Index offre une solution plus adaptée.

Considérez le code suivant :

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)
Copier après la connexion

Dans cet extrait, l'entrée variable stocke le chaîne cible. Nous initialisons une tranche vide d'entiers nommée idx pour stocker les indices de départ des correspondances de modèles dans la chaîne d'entrée. La variable j garde une trace de la position actuelle dans la recherche.

Le cœur de la solution réside dans la boucle for. Nous appelons à plusieurs reprises strings.Index pour rechercher le modèle ".#.." La valeur renvoyée i représente la première occurrence du modèle à partir de l'index j. Si i n'est pas -1, nous avons trouvé une correspondance et enregistrons son index de départ (j i) dans la tranche idx. Nous incrémentons ensuite j de i 1 pour déplacer la recherche vers le caractère suivant la correspondance.

La boucle continue ce processus jusqu'à ce qu'il n'y ait plus de correspondances trouvées. Nous obtenons ensuite la liste des indices de départ pour toutes les correspondances qui se chevauchent de ".#.." dans la chaîne d'entrée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal