Bonjour,

J'ai résolu le problème avec l'exemple ci-dessous. Mais j'aimerais votre avis pour savoir si c'est la bonne méthode avec une chaine à analyser très longue (100 000 caractères par exemple). Si les seuls occurences "toto" sont très nombreuse (exemple 10000) cela va prendre un bout bout de temps !

Le but : rechercher la sous-chaine "toto......###" dans la chaine mère ou les 6 points peuvent être n'importe quel caractère. Comme cette fonction n'existe pas pour les chaines j'ai décomposer en deux phase : (1) rechercher si la chaine "toto" est présente (si oui on donne à index sa position) puis (2) vérifier si la chaine "###" est présente à l'index +10 ? Si oui OK. Donc ça sera une boucle dans une autre.

Dans l'exemple ci-dessous cette occurence ne se produit que deux fois (index 0 et index 51).

Ouvrir une form avec deux textbox en multilignes et un bouton pour visualiser le résultat.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
 
Imports System.Text.RegularExpressions
 
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
        Dim text = "totoabcdef###totototoghitotojkl###mnopqrstuvwxyzabctotodefcde###ghijklm###"
 
        Dim rx = New Regex("toto", RegexOptions.IgnoreCase)
        Dim sx = New Regex("###", RegexOptions.IgnoreCase)
 
        Dim mc = rx.Matches(text)
        Dim sc = sx.Matches(text)
 
        Dim i, j, k As Integer
 
        'recherche chaque occurance de "toto"
        For Each m As Match In mc
            i += 1
            TextBox1.Text += Str(i) + "         " + Str(m.Index.ToString) + vbCrLf
 
            'recherche chaque occurance de "###"
            For Each s As Match In sc
                j += 1
                TextBox2.Text += Str(j) + "           " + Str(s.Index.ToString) + vbCrLf
 
                'Vérifie si l'espace entre index "toto" et index "###" est bien égal à 10
                If s.Index.ToString = m.Index.ToString + 10 Then
                    k += 1
                    TextBox2.Text += "Concordance trouvée numéro " + Str(k) + vbCrLf
                End If
            Next
        Next
 
    End Sub
End Class
Merci pour vos suggestions.

A+