Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre à l'essai
    Inscrit en
    novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : novembre 2006
    Messages : 150
    Points : 20
    Points
    20

    Par défaut Expression Régulières pour plusieurs remplacements

    Bonjour,

    J'aimerais remplacer, pour une chaine donnée un saut de ligne avant certains caractères :
    if => saut de ligne + if
    del => saut de ligne + del
    ...

    j'aimerais le faire avec une expression régulière, car pour l'instant c'est un peu barbare , et ma chaine n'est modifiée qu'une seule fois :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function ReplaceWithVBCRLF (script)
     
    	Dim clean
    	ReplaceWithVBCRLF = Replace(script, "IF", VBCrlf & "IF")
    	ReplaceWithVBCRLF = Replace(script, "if", VBCrlf & "if")
    	ReplaceWithVBCRLF = Replace(script, "DEL", VBCrlf & "DEL")
    	ReplaceWithVBCRLF = Replace(script, "del", VBCrlf & "del")
    	ReplaceWithVBCRLF = Replace(script, "DELTREE", VBCrlf & "DELTREE")
    	ReplaceWithVBCRLF = Replace(script, "deltree", VBCrlf & "deltree")
    	ReplaceWithVBCRLF = Replace(script, "MSIEXEC", VBCrlf & "MSIEXEC")
    	ReplaceWithVBCRLF = Replace(script, "msiexec", VBCrlf & "msiexec")
     
    End Function
    Merci pour votre aide

  2. #2
    Expert Confirmé Sénior
    Avatar de hackoofr
    Homme Profil pro Mehdi Tounisiano
    Enseignant
    Inscrit en
    juin 2009
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Nom : Homme Mehdi Tounisiano
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 2 764
    Points : 6 716
    Points
    6 716

    Par défaut


    Inspirez-vous de cette discussion Regex dans la fonction replace

  3. #3
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 491
    Points : 6 363
    Points
    6 363

    Par défaut

    Salut
    et ma chaîne n'est modifiée qu'une seule fois
    Normale, si lors du premier Replace il y a remplacement, le suivant ne part pas de la chaîne contenant le remplacement précédent.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function ReplaceWithVBCRLF(script)
     
        Dim clean
        clean = script
        clean = Replace(clean, "IF", vbCrLf & "IF", 1, -1, 0)
        clean = Replace(clean, "if", vbCrLf & "if", 1, -1, 0)
        clean = Replace(clean, "DEL", vbCrLf & "DEL", 1, -1, 0)
        clean = Replace(clean, "del", vbCrLf & "del", 1, -1, 0)
        clean = Replace(clean, "DELTREE", vbCrLf & "DELTREE", 1, -1, 0)
        clean = Replace(clean, "deltree", vbCrLf & "deltree", 1, -1, 0)
        clean = Replace(clean, "MSIEXEC", vbCrLf & "MSIEXEC", 1, -1, 0)
        clean = Replace(clean, "msiexec", vbCrLf & "msiexec", 1, -1, 0)
    ReplaceWithVBCRLF = clean
     
    End Function

  4. #4
    Membre à l'essai
    Inscrit en
    novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : novembre 2006
    Messages : 150
    Points : 20
    Points
    20

    Par défaut

    Citation Envoyé par hackoofr Voir le message

    Inspirez-vous de cette discussion Regex dans la fonction replace
    Merci , mais ma question c'est surtout que dois-je mettre dans regExp.Pattern = " " pour être sur que ça match ?

    Merci pour ta réponse ProgElecT, c'est au moins une solution temporaire
    plus longue, plus barbare, donc moins élégante..

  5. #5
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 491
    Points : 6 363
    Points
    6 363

    Par défaut

    Salut

    Mettant mis à apprendre l'utilisation de RegExe depuis peu, j'ai fait un petit programme pour tester le .Pattern
    Cela pourrait donner une fonction de se type
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Function ReplaceWithVBCRLF(script)
    Dim RegularExpress
    Dim MotRech(8), Patter, MotRepl
    Dim Cpt
    Dim Clean
     
    MotRech(0) = "if": MotRech(1) = "del": MotRech(2) = "deltree": MotRech(3) = "msiexec"
    MotRech(4) = "IF": MotRech(5) = "DEL": MotRech(6) = "DELTREE": MotRech(7) = "MSIEXEC"
     
    Clean = script
    Set RegularExpress = New RegExp
    RegularExpress.Global = True
    RegularExpress.IgnoreCase = False
     
    For Cpt = 0 To UBound(MotRech) - 1
        RegularExpress.Pattern = "\s\b" & MotRech(Cpt)
        MotRepl = vbNewLine & MotRech(Cpt)
        Clean = RegularExpress.Replace(Clean, MotRepl)
    Next
    Set RegularExpress = Nothing
     
    ReplaceWithVBCRLF = Clean
     
    End Function
    Appel de la fonction
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'exemple d'utilisation
    Dim TextSoumis
    TextSoumis = "Private Sub Option1_Click(Index As Integer)" & vbNewLine & _
            "If Index = 0 Then RegularExpressioN.IgnoreCase = False: if truc Then machin" & vbNewLine & _
            "If Index = 1 Then RegularExpressioN.IgnoreCase = True" & vbNewLine & _
            "End Sub"
    '"if truc Then machin" va se retrouvé sur une ligne distincte,
    'les autres "if" ne vont pas être affectés par le replace
    Msgbox ReplaceWithVBCRLF(TextSoumis)
    Je le répète, j'apprend

  6. #6
    Membre à l'essai
    Inscrit en
    novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : novembre 2006
    Messages : 150
    Points : 20
    Points
    20

    Par défaut

    Citation Envoyé par ProgElecT Voir le message
    Salut

    Mettant mis à apprendre l'utilisation de RegExe depuis peu, j'ai fait un petit programme pour tester le .Pattern
    Cela pourrait donner une fonction de se type


    Je le répète, j'apprend
    Merci , j'ai testé ta fonction mais ça me renvoit la string à l'identique..

  7. #7
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro Francis MILLET
    Inscrit en
    décembre 2004
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Nom : Homme Francis MILLET
    Âge : 58
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 491
    Points : 6 363
    Points
    6 363

    Par défaut

    Avec l'exemple proposé, cela donne un bon résultat, mais ton texte soumis n'est peut être pas structuré à l'identique.
    Essais de remplacer la ligne 16 par RegularExpress.Pattern = "\b" & MotRech(Cpt)mais tu auras un retour à la ligne pour chaque occurrence.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •