REGEX supprimer un caractère dans une sous chaine
Fermé
kiligg
-
8 juin 2015 à 18:00
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 1 juil. 2015 à 14:33
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 1 juil. 2015 à 14:33
A voir également:
- REGEX supprimer un caractère dans une sous chaine
- Caractère ascii - Guide
- Supprimer une page dans word - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
1 réponse
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
Modifié par [Dal] le 1/07/2015 à 14:35
Modifié par [Dal] le 1/07/2015 à 14:35
Salut kiligg,
J'ignore si tu as toujours ce problème.
Il manque certaines précisions pour être sûr de ce que tu veux faire, mais voilà un exemple de code et de regexp qui altère ta ligne d'exemple de la façon que tu souhaites dans ton exemple.
donne :
La regexp boucle sur une ligne tant qu'il y a des doubles guillemets avec au moins un pipe dedans, et les retire un à un en concaténant ce qui est avant et après le pipe. Les spécificateurs .*? non gourmands sont utilisés pour le cas où il y a plusieurs données entre doubles guillemets dans une ligne.
Si cela te va, tu peux adapter ce code pour traiter ainsi toutes tes lignes.
Il a sans doutes des façons plus optimisées de faire, mais c'est celle qui m'est venue à l'esprit en premier :-)
Dal
J'ignore si tu as toujours ce problème.
Il manque certaines précisions pour être sûr de ce que tu veux faire, mais voilà un exemple de code et de regexp qui altère ta ligne d'exemple de la façon que tu souhaites dans ton exemple.
#!/usr/bin/perl use strict; use warnings; my $st = qq("230000034098|""PT.RLT.1/40T|2/50T|1/100T|2/25""|21530000||||0.00||104808.70|1996|01/01/1998||||||IS01705910||62330||LINR|10|2013|0|-104808.7|T001"); while ($st =~ /(.*"".*?)(\|)(.*?"".*)/) { $st = $1 . $3; } print "Résultat :\n" . $st . "\n";
donne :
Résultat :
"230000034098|""PT.RLT.1/40T2/50T1/100T2/25""|21530000||||0.00||104808.70|1996|01/01/1998||||||IS01705910||62330||LINR|10|2013|0|-104808.7|T001"
La regexp boucle sur une ligne tant qu'il y a des doubles guillemets avec au moins un pipe dedans, et les retire un à un en concaténant ce qui est avant et après le pipe. Les spécificateurs .*? non gourmands sont utilisés pour le cas où il y a plusieurs données entre doubles guillemets dans une ligne.
Si cela te va, tu peux adapter ce code pour traiter ainsi toutes tes lignes.
Il a sans doutes des façons plus optimisées de faire, mais c'est celle qui m'est venue à l'esprit en premier :-)
Dal