comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?
Salut,
Je suis nouveau sur les regex, je dois extraire le nom des utilisateurs de leur identifiant, par exemple :
J'ai la longue chaîne suivante
123450_dan ; 154396_kelli; 198756_dev ;
Le résultat doit être : Dan
Quelle expression régulière dois-je utiliser pour extraire le nom et l'identifiant 123450 ?
Merci d'avance.
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Merci, fonctionne parfaitement !!
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Merci, fonctionne parfaitement.
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Utilisez plutôt ce formulaire :
name = Regex( string, "123450_([a-zA-Z ]+);", "\1" );
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Le script que j'ai fourni précédemment utilisant les fonctions JMP ne nécessiterait aucune modification.L'expression régulière pour capturer un ou plusieurs "noms" après le trait de soulignement serait (\w+\s*)+ ce qui signifie accumuler ( ) au moins un mot \w+ , zéro ou plusieurs espaces \s* et le plus final implique de répéter le modèle une ou plusieurs fois.
Names Default to Here(1);
string="123450_dan fox; 154396_kelli ann marie; 198756_dev;";
name1 = Regex( string, "123450_((\w+\s*)+\b)", "\1" );
name2 = Regex( string, "154396_((\w+\s*)+\b)", "\1" );
Show( name1, name2 ); <BR />/*: name1 = "dan fox"; name2 = "kelli ann marie"; */
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Salut Mark,
Juste 1 question, que dois-je ajouter si j'ai de l'espace dans le nom d'utilisateur :
par exemple : "123450_dan fox ; 154396_kelli ; 198756_dev;"
J'ai essayé la Regex suivante :
string="123450_dan fox; 154396_kelli; 198756_dev;"
nom = Regex( chaîne, "123450_(\w+ | \s+)", "\1" );
Afficher( nom );
Résultat : "dan" au lieu de "dan fox"
Merci d'avance.
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Juste pour le fun, et parce que les expressions régulières peuvent être difficiles à lire par les autres (ou deux semaines plus tard), voici une alternative, utilisant les fonctions JMP.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
//create a list of id_name
id = Words(string, ";");
//create a list if ids, a list if names, an associative array(keyed list)
idlist={};
namelist={};
lookup = [=>""]; //Associative Array that retuns an empty string, if number is not valid
for(i=1, i<=nitems(id), i++,
InsertInto(idlist, num(word(1,Trim(id[i]),"_")) );
InsertInto(namelist, Titlecase(word(2,Trim(id[i]),"_")) ); //don't need TitleCase
lookup[idlist[i]]=namelist[i] //ids are the keys and names are the values
);
show(id, idlist, namelist, lookup, lookup[198756], lookup[128954]); //last one is not valid
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Merci Marc,
Fonctionne parfaitement !!Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?En supposant que vous souhaitiez que le nom soit associé à un identifiant spécifique dans la partie "id_name;", alors cette version fonctionnera également.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// target ID
id = "123450";
// assume specific ID
name = Regex( string, id || "_(\w+);", "\1" );
Show( name );
Re : comment extraire une chaîne entre un modèle spécifique à l'aide d'une expression rationnelle ?Vous n'avez pas spécifié beaucoup de détails sur l'ID, voici donc quelques exemples pour commencer. J'ai utilisé un script JMP, mais cette extraction pourrait également être utilisée dans une formule de colonne.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// assume specific ID
name = Regex( string, "123450_(\w+\b)", "\1" );
Show( name );
// assume first ID with 6 numbers
name = Regex( string, "\d{6}_(\w+\b)", "\1" );
Show( name );
// assume first ID with any number of numbers
name = Regex( string, "\d+_(\w+\b)", "\1" );
Show( name );