p
u
b
l
i
c
i
t
é
publicité
  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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Enseignant
    Inscrit en
    juin 2009
    Messages
    3 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 3 010
    Points : 7 315
    Points
    7 315

    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
    Inscrit en
    décembre 2004
    Messages
    3 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 683
    Points : 6 410
    Points
    6 410

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    décembre 2004
    Messages
    3 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 683
    Points : 6 410
    Points
    6 410

    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    décembre 2004
    Messages
    3 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 3 683
    Points : 6 410
    Points
    6 410

    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.

Discussions similaires

  1. Besoin d'aide pour remplacer avec expression régulière sur plusieurs lignes
    Par MediaVistaIntel dans le forum Général Python
    Réponses: 11
    Dernier message: 01/12/2011, 14h19
  2. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  3. Expression régulière pour remplacer une apostrophe
    Par syrius31 dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2008, 20h34
  4. expression régulière pour remplacer des balises
    Par oceanbigone dans le forum Regex
    Réponses: 5
    Dernier message: 29/05/2007, 18h11
  5. Expression régulière pour plusieurs remplacements
    Par mickael99 dans le forum java.util
    Réponses: 4
    Dernier message: 22/02/2006, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo