Extraction de chiffres et opérateurs avec REGEX

Bonjour à tous,

J'aimerais ressortir d'une chaines de caractères >=4 && <5 les chiffres 4 et 5 et les opérateurs >= et <.

J'ai essayé avec les expressions régulières mais je n'obtient que le le premier chiffre (4) et le premier opérateur (>=).

    regexValeurs.Pattern = "[0-9]+"
    regexOperateurs.Pattern = "[\+\-\*\/\>\<\=]+|>=|<="

Merci d'avance de votre aide.

Bonjour,

Ceci:

Function RegexChiffresOperateurs(valComp As String, plg As Range)
    Dim regexValeurs As Object
    Dim regexOperateurs As Object
    Dim inputString As String
    Dim valeursMatches As Object
    Dim operateursMatches As Object

    Set regexValeurs = CreateObject("VBScript.RegExp")
    Set regexOperateurs = CreateObject("VBScript.RegExp")

    regexValeurs.Pattern = "[0-9]+"
    regexOperateurs.Pattern = "[\+\-\*\/\>\<\=]+|>=|<="

    valeurs = plg.Value

    ' Parcourir les valeurs pour évaluer la condition
    For i = 1 To UBound(valeurs, 2)
        ' Chaîne d'exemple avec une condition
        inputString = valeurs(1, i)

        ' Extraire les valeurs de la condition
        Set valeursMatches = regexValeurs.Execute(inputString)

        ' Parcourir et afficher les valeurs extraites
        For Each valeurMatch In valeursMatches
            'Debug.Print "valeur extraite : " & valeurMatch.Value
            valeur = valeur & ", " & valeurMatch.Value
        Next valeurMatch

        ' Extraire les opérateurs de la condition
        Set operateursMatches = regexOperateurs.Execute(inputString)

        ' Parcourir et afficher les opérateurs extraits
        For Each operateurMatch In operateursMatches
            'Debug.Print "Opérateur extrait : " & operateurMatch.Value
            operateur = operateur & ", " & operateurMatch.Value
        Next operateurMatch
    Next i

    RegexChiffresOperateurs = "Valeur extraite : " & valeur & Chr(10) & "Opérateur extrait : " & operateur
End Function

Cdlt

Bonjour Arturo,

Merci pour ton retour.

J'obtiens l'erreur : #NOM?

Bonjour,

Pourtant dans le fichier joint, il n'y a pas d'erreur, voir le résultat en image ci-dessous.

atlas

- Avez-vous modifier quelque chose?

Cdlt

Bonsoir Arturo,

Après avoir retéléchargé le fichier, j'ai constaté que le pattern n'extrait que la partie gauche de la condition.

valeursoperateursextraits

Par exemple, si la condition est >=19 && <20, le regex n'extrait que la première valeur trouvée, soit 19, ainsi que le premier opérateur, soit >=

Salut,

Tu as de bon testeurs de RegExpression notamment celui-ci ou tu as pas mal d'exemples.

regex101: build, test, and debug regex

Bonjour,

voici la partie modifiée!

    regexValeurs.Global = True
    regexValeurs.Pattern = "[0-9]+"
    regexOperateurs.Global = True
    regexOperateurs.Pattern = "([><]=?)|\b="  

Cependant, il subsiste un petit problème, dans la colonne "A", il ne peut pas détecter le signe"=" dans la chaîne "=0", car apparemment le format n'est pas bon, normalement le contenu de la cellule devrait être "0", le signe "=" ne doit pas apparaitre, il ne l'est pas dans les autres colonnes où c'est =0)

Cdlt

Bonjour Arturo,

Merci pour tes modifications.

normalement le contenu de la cellule devrait être "0", le signe "=" ne doit pas apparaitre

Le signe "=" devant "0", ou tout autre signe devant des nombres, je m'en sers pour évaluer, par exemple, l'expression "5,5=0" à la ligne 6 ou
"0=0" à la ligne 7, sinon on finira par se trouver devant une expression
incorrecte, même si on devrais comparer l'expression "0 0".

Comme le signe "=" est également affiché dans le tableau. Il est donc logique qu'il soit extrait dans les résultats.

Le signe "=" devant "0", ou tout autre signe devant des nombres, je m'en sers pour évaluer, par exemple, l'expression "5,5=0" à la ligne 6 ou
"0=0" à la ligne 7, sinon on finira par se trouver devant une expression

Si le signe est compris entre 2 valeurs comme vous le signalé, il n'y a pas de problème et il est récupéré, or dans le tableau, à la ligne 6 ou 7, il y a "=0", donc, rien devant "=", et c'est uniquement dans ce cas que le signe "=" n'est pas détecté.

Re,

il y a "=0", donc, rien devant "=", et c'est uniquement dans ce cas que le signe "=" n'est pas détecté.

Une idée pour permettre de détecter le signe "=" ?

Ceci devrait aller:

    regexOperateurs.Pattern = "([=><]=?)|\b="

Merci Arturo.

Tous les éléments, valeurs et opérateurs, sont extraits.

valeursoperateursextraits

Merci Arturo et merci Jean-Paul pour le lien de tests des REGEX.

bonjour

avec ce pattern j'ai tout les matchs des opérandes

"([^\w]{1,2})(\d+)"

traduction

un caractère particulier et peut être un autre + une valeur numerique (le tout collé)

les valeurs numerique isolées sont exeptées

mais après pour diséquer

Function regx(txt As String) As String
'patricktoulon
    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "([^\w]{1,2})(\d+)"
    End With

    Set matchs = regex.Execute(txt)
    Debug.Print "occurences " & matchs.Count
    If matchs.Count > 0 Then
        For i = 0 To matchs.Count - 1
            Debug.Print matchs(i)
        Next
    End If
    Debug.Print "********************"

End Function
Sub test()
    regx [a2].Text
    regx [b2].Text
    regx [c2].Text
    regx [d2].Text
    regx [e2].Text
End Sub
image

Re,

Dernier petit commentaire. Comme il faut toujours mieux prévenir que guérir, je te conseille fortement de tester ton Expression avant de lancer un Execute. Ceci afin d'éviter toutes déconvenues qui pourraient surgir.

Bonsoir Patrick, Jean-Paul, le forum,

Merci pour ton code, Patrick.

Cependant, les résultats que j'ai obtenus diffèrent des tiens.

J'ai tenté de créer une autre fonction basée sur ton code, afin de comparer les valeurs de la colonne F avec la plage A:E, mais je n'ai pas obtenu le résultat attendu.

Jean-Paul :

je te conseille fortement de tester ton Expression avant de lancer un Execute

Comment faire cela ?

Merci.

Re,

Tu as la méthode .Test pour tester si l'expression renvoie quelque-chose.

Bonjour,

J'ai essayé d'utiliser le résultat du test logique pour afficher une couleur et un message d'alerte correspondant, cependant la nouvelle fonction personnalisée adaptée me retourne l'erreur #VALEUR!

Merci d’avance.

Salut,

Tu le sort d'où sColEntete ?

Cette variable me sert pour récupérer l'en-tête de la colonne ou le test a été concluant.

Re,

Cette variable me sert pour récupérer l'en-tête de la colonne ou le test a été concluant.

Déclarée en public ?

Rechercher des sujets similaires à "extraction chiffres operateurs regex"