IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

chercher remplacer avec regex


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut chercher remplacer avec regex
    delphi 10.1 berlin

    bonjour,

    dans un Memo j'ai un texte avec des balises genre <J45> , <J60> , et je les remplace par la date du jour+45 ou 60...
    donc j'ai dans ma fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    result := StringReplace(result,'<J45>',FormatDateTime('dd/mm',incday(now,45)),[rfReplaceAll,rfIgnoreCase]);
    result := StringReplace(result,'<J60>',FormatDateTime('dd/mm',incday(now,60)),[rfReplaceAll,rfIgnoreCase]);
    au moment de devoir ajouter un <J10>, je me demande si avec les regex, y'a pas un moyen assez simple (qui demande pas 100 lignes de code pour en remplacer 5... ) , pour rechercher les balise <Jx> ou x est [0-9]{1,3} et remplacer par inc(now+x)
    comme ça , ça marcherai avec <J10> , <J85>, etc....

    j'ai vu des exemples pour rechercher avec un regex mais pas pour "récuperer" une partie de la recherche pour faire un remplacer...


    merci.

    bonne journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il est possible de remplacer des chaines de caractères avec TRegExReplace

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    cool ! merci beaucoup, ça marche.
    je pense que j'aurais du faire un 2eme regex dans ReplaceCC....

    le code suivant tranforme
    aaa <j0> bbbb <j10> ccc <j8> ddd<j+9> eee (edit1)
    en
    aaa 12/11 bbbb 22/11 ccc 20/11 ddd21/11 eee (edit2)

    <j+x> ou <jx> ajoute x jour à la date du jour

    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
     
    function TForm1.ReplaceCC(const Match: TMatch): string;
    var f : integer;
        chaine : string;
    begin
      chaine := '';
      for f := 1 to length(match.Value) do
        if charinset(match.Value[f],['0'..'9']) then
          chaine := chaine + match.Value[f];
       Result := FormatDateTime('dd/mm',incday(Date,strtoint(chaine)));
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var regex: TRegEx;
        input: string;
        myEval: TMatchEvaluator;
    begin
      i := 0;
      input := Edit1.Text;
      regex.Create('<(j|j\+)[0-9]{1,3}>');
      myEval := ReplaceCC;
      Edit2.Text := regex.Replace(input, myEval);
    end;

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 956
    Points
    40 956
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je pense que j'aurais du faire un 2eme regex dans ReplaceCC....
    je pense que en travaillant un peu l'expression ...
    la même avec un groupe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <(j|j\+)(?<AddDays>[0-9]{1,3})>
    et en substitution
    Donnerai
    aaa 0 bbbb 10 ccc 8 ddd9 eee
    la seule chose que je ne peux vérifier sans faire un programme c'est la valeur de Match.Value
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. chercher remplacer avec expression reguliere
    Par ImagingAllthe dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2010, 16h19
  2. remplacement avec incrément regex
    Par van___fanel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/03/2010, 16h17
  3. chercher, remplacer avec une condition
    Par Kazujoshi dans le forum Débuter
    Réponses: 1
    Dernier message: 10/12/2009, 16h57
  4. Réponses: 2
    Dernier message: 26/02/2007, 15h07
  5. Chercher remplacer avec carractère inconnu
    Par pseudopub dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/02/2007, 11h58

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