Extraire le numéro adjacent à la chaîneSalut, quelqu'un peut-il m'aider à extraire les nombres adjacents aux chaînes ?
J'ai la colonne 1 ci-dessous et je m'attends à extraire les nombres adjacents à "HFA" (colonne 2).
J'ai essayé le JSL suivant, mais je n'ai pas pu obtenir la colonne 2 à laquelle je m'attendais
Num( Regex( :Colonne 1, "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )
| colonne1 | colonne2 |
| 400HFA isa300 | 400 |
| isa300 HFA400 | 400 |
Merci d'avoir réfléchi à la question.
Automatisation et scriptsRe : Extraire le numéro adjacent à la chaîneSALUT @jthi
Merci beaucoup pour votre solution alternative au problème, ainsi que pour le lien sur regex.
Re : Extraire le numéro adjacent à la chaîneSalut @Craige_Hales ,
Merci beaucoup d'avoir enrichi la discussion.
En fait, j'ai découvert les regex de JMP pour la première fois grâce à votre ancien article !
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008
Re : Extraire le numéro adjacent à la chaîneUn bon endroit pour pratiquer et tester regex est https://regex101.com/ .

Ces commentaires avec les caractères d'échappement JMP supprimés ont été très utiles, je dois commencer à les ajouter lorsque j'écris des modèles de regex plus compliqués ( Problème de regex avec des caractères échappés )
Re : Extraire le numéro adjacent à la chaîneMerci @AprioriFish3134 pour signaler le problème d'origine (pas de \2), et @ngambles pour une bonne solution.
Si vous avez besoin d'encore plus de niveaux de parenthèses imbriquées, ou de parenthèses séquentielles dans votre exemple, comptez simplement les parenthèses ouvertes de gauche à droite pour découvrir le numéro de référence arrière. La référence arrière pour les alternatives inutilisées est une chaîne vide.
Regex( "abac", "(((a)|(b)|(c))(c))+", "1=\1 2=\2 3=\3 4=\4 5=\5 6=\6" )
"1=ac 2=a 3=a 4= 5= 6=c"
Une chose qui n'est peut-être pas évidente : la référence arrière peut également être utilisée dans le motif. Cela peut être utile pour s'assurer que les guillemets ou les apostrophes de début et de fin sont utilisés de manière cohérente :
Write( Regex(
"before 'a \!"b\!" c' after", // before 'a "b" c' after
"(\!"|')(.*?)\1", // ("|')(.*?)\1
"\2"
) )
un "b" c
(L'échappement \!" place un guillemet à l'intérieur des chaînes ; le commentaire affiche le texte de la chaîne.) Dans cet exemple, le groupe \1 peut correspondre à " ou ' et \2 correspond à tout le texte jusqu'à une autre occurrence de \1.
Utilisez des commentaires si vous écrivez des regex comme ça ! Le prochain mainteneur appréciera.
Re : Extraire le numéro adjacent à la chaîneSi, pour une raison quelconque, il est nécessaire de résoudre le problème @ngambles mentionné, un moyen assez simple serait d'utiliser Regex Match au lieu de Regex
Names Default To Here(1);
a = "400HFA isa300";
b = "isa300 HFA400";
c = "400HFA300";
d = "400HF300";
rgx_pattern = "(\d*)(?:HFA)(\d*)";
show(Regex Match(a, rgx_pattern));
show(Regex Match(b, rgx_pattern));
show(Regex Match(c, rgx_pattern));
show(Regex Match(d, rgx_pattern));
Regex Match nécessitera cependant quelques vérifications supplémentaires car il renvoie une liste des groupes capturés.
Re : Extraire le numéro adjacent à la chaîneSalut Ngambels,
Merci beaucoup pour votre aide. Cela a résolu le problème.
j'ai essayé
"(\d*)HFA(\d*)"
mais apparemment j'ai raté (je ne savais pas que je pouvais et devais utiliser à la fois \1 et \2)
"\1\2"
J'ai appris de nouvelles choses grâce à vous et grâce à cette discussion.
Encore une fois, je vous remercie beaucoup!
Re : Extraire le numéro adjacent à la chaîneÉtant donné le petit ensemble d'exemples, la formule suivante fonctionne :
Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )
Cette solution rencontrera des problèmes si vous avez des instances comme "400HFA300".Il retournera 400300.