Regexp sur une chaîne alpha numérique
Aloha
Je dois avoir un problème de mise en route avec ce langage parce que je n'arrive toujours pas à le manipuler avec aisance.
Donc voilà mon besoin :
extraire d'une chaîne (obtenue par l'instruction [FME_GetAttribute CODE_RIVOLI]) pouvant être soit C-CCCC (où C est un chiffre) soit C-ACCC (où C est un chiffre et A une lettre) la partie post tiret.
J'ai donc scripté :
Code:
1 2 3 4 5
| if {[FME_GetAttribute CODE_RIVOLI] != ""} then {
regexp {(\d*)-(\d{4})|(\w+\d{3})-.*} [FME_GetAttribute CODE_RIVOLI] A_ NUM_ RIVOLI_
puts "CODE rivoli d'origine [FME_GetAttribute CODE_RIVOLI]"
puts "A_ : $A_"
puts "RIVOLI : $RIVOLI_"} |
Cela fonctionne sur les chaînes toute numérique (la première branche de mon regexp) mais pas sur la chaîne "1-B001".
Quelqu'un a-t'il une idée ? Quelqu'un voit où je me suis planté ?
D'avance merci
PS. Suis-je obligé de récupéré A_ et NUM_ ? Ne puis-je pas récupérer seulement la partie de ma chaîne m'intéressant sans les deux autres (la complète et le premier membre) ?
La solution :
Code:
1 2 3 4 5
| if {[FME_GetAttribute CODE_RIVOLI] != ""} then {
regexp -expanded -- {(?:\d*) \- ([[:alnum:]]{4}) .*} [FME_GetAttribute CODE_RIVOLI] A_ RIVOLI_
puts "CODE rivoli d'origine [FME_GetAttribute CODE_RIVOLI]"
puts "A_ : $A_"
puts "RIVOLI : $RIVOLI_"} |