REGEX supprimer un caractère dans une sous chaine
Fermé
kiligg
-
8 juin 2015 à 18:00
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 1 juil. 2015 à 14:33
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 1 juil. 2015 à 14:33
A voir également:
- REGEX supprimer un caractère dans une sous chaine
- Supprimer une page word - Guide
- Caractère ascii - Guide
- Supprimer compte instagram - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
1 réponse
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
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