Aide pour une Regex

Aide pour une Regex - Divers - Programmation

Marsh Posté le 31-07-2022 à 21:48:19    

Bonjour
 
j'ai plusieurs fichiers dont il faudrait changé le contenu, j'envisage d'utiliser Notepadd++ pour cela mais je ne maitrise pas les expressions réguliere...j'aurais besoin de votre aide
toutes mes lignes contenant %endtestcase doivent etre entourer par /* */  (delimiteur de debut %endtestcase   delimiteur de fin : ; ).............et bien évidemment les paramètres situé entre les parenthèses ne sont pas fixe ;-)
Exemple :
avant :

Citation :


blablabla
%endTestcase(i_assertLog=1,i_nbasser=2,l_errors=1,l_warnings=0);
blablabla
blablablablablabla


Apres :

Citation :


blablabla
/*%endTestcase(i_assertLog=1,i_nbasser=2,l_errors=1,l_warnings=0);*/
blablabla
blablablablablabla


Et encore mieux et si possible avec ces deux lignes en plus :

Citation :


blablabla
/*%endTestcase(i_assertLog=1,i_nbasser=2,l_errors=1,l_warnings=0);*/
%assertLog(i_errors=,i_warnings=);
%endTestcase(i_assertLog=1);
blablabla
blablablablablabla


 
Merci
Nicolas.


Message édité par nicof86 le 31-07-2022 à 21:49:57
Reply

Marsh Posté le 31-07-2022 à 21:48:19   

Reply

Marsh Posté le 01-08-2022 à 10:31:12    

Perso, je ferais plutôt un petit script en PHP (ou Perl, Python, bash, Powershell...) suivant ton langage préféré et ton OS. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2022 à 09:00:34    

Sinon ça doit être un truc du genre :

Code :
  1. ^(%endTestcase.*;)$


et avec le groupe tu récupères la ligne pour en faire ce que tu veux.
(même pas sûr que ça soit nécessaire de faire un groupe pour ça, je ne me rappelle plus)


Message édité par gzii le 03-08-2022 à 09:01:42
Reply

Marsh Posté le 03-08-2022 à 12:03:40    

Le problème, c'est que .* ne remplace tout type de caractère :/ Certains ne sont pas pris en compte (du genre, saut de ligne, tabulation...) et du coup, en fonction de ce que qui se trouve après "endTestcase", la regexp va plus ou moins laisser des lignes de côté.
 
Moi, je l'aurais fait en PHP en recherchant la position de la chaîne "endTestcase" puis en recherchant la position de la chaîne de fin et je prendrais tout ce qui se trouve entre les 2 positions, le tout dans une boucle.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2022 à 12:08:28    

Ah tu disais toutes les lignes.

Reply

Marsh Posté le 03-08-2022 à 15:55:08    

quand .+ n'est pas suffisant et que tu veux matcher des lignes entières, tu peux utiliser [\s\S]+


---------------
Blablaté par Harko
Reply

Marsh Posté le 06-08-2022 à 10:29:17    

Comme c'est du remplacement de ligne, c'est simple :  
https://rehost.diberie.com/Picture/Get/f/82439
 
Rechercher : ^(%endTestcase.*)$
Remplacer : /*$1*/\n%assertLog\(i_errors=,i_warnings=\);\n%endTestcase\(i_assertLog=1\);
 
Bon, s'il voulait en 2e ligne de remplacement
%assertLog(i_errors=1,i_warnings=0);
avec les valeurs des paramètres comme dans la ligne initiale, alors la ça serait complexe a faire dans notepad++, mais trivial en perl, ou python aussi, je suppose.
 

rufo a écrit :

Le problème, c'est que .* ne remplace tout type de caractère :/ Certains ne sont pas pris en compte (du genre, saut de ligne, tabulation...) et du coup, en fonction de ce que qui se trouve après "endTestcase", la regexp va plus ou moins laisser des lignes de côté.


Non. Un . matche tout, sauf \n,  en tout cas dans la syntaxe pcre, qui est le standard, et ce qu'utilise Notepad++
En particulier, .* matche donc les tabulations.
J'ai l'impression que tu mélanges avec \s qui lui correspond  (en locale standard, ie ascii) à \t, \f, VT (\xB), \n, \r, et l'espace standard lui même, soit [\x9-\xD\x20].
A+,


Message édité par gilou le 06-08-2022 à 10:58:41

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed