Comment utiliser la substitution regex <*> ?Comment utiliser regex pour remplacer le texte de dt[1,"A"] par des tabulations pour chaque <*>.Il obtient le résultat multi-colonnes dans la ligne 2.

Merci!
abc<AHREF>897"id="s897"</AHREF>
ScriptRe : Comment utiliser la substitution regex <*> ?ignorez les 0,5 sec, # liens commentaires dans le JSL. Exécutez votre propre test.
Les commentaires se gâtent vite, surtout lors d'un copier/coller !
Re : Comment utiliser la substitution regex <*> ?/*
THIS IS NOT AN HTML PARSER
HTML parsers are hard to write. There are better ways.
Neither of these JSL ideas can properly skip comments or
many other HTML tags that should be skipped. They will
find things they shouldn't and miss other things they
should find. They've only been minimally tested on one site.
This code is presented as "how can I use contains() vs patmatch()
to efficiently work through a large string looking for something?"
The second example is FIVE TIMES FASTER and a LITTLE MORE ACCURATE.
The third example uses text explorer to grab links. I don't think
there is a pre-existing regex for the link text descriptions. It works
very similar to this code; it is NOT an HTML parser either.
If you can use python, you might want to investigate "beautiful soup".
I've not used it, but believe it addresses the "hard to write" issue.
*/
u = "https://community.jmp.com/t5/Discussions/bd-p/discussions";
txt = Load Text File( u );
// a link on a page has at least two parts:
// the URL and some descriptive text.
// <A ...="" href="https://community.jmp.com/url" ...="" target="_blank" rel="nofollow noopener noreferrer"> descripton </A>
// p1 p4 p5
// to parse ALL the links on a page, you'll want
// some sort of loop. There are many ways to
// write that loop; here are two choices
// using contains and regex. "<A>", p1 + 3 ); // find the end of the opening tag
p5 = Contains( txt, "</A>", p4 + 1 ); // find the ending tag
if( p5 > p4, // as long as the end is not zero, we found one, see break() below
desc = Substr( txt, p4 + 1, p5 - p4 - 1 ); // the visible link description. Images can be here too.
desc = Regex( desc, "<[^>]*>", "", globalreplace ); // remove span, image, etc tags
linktext = Substr( txt, p1, p4 - p1 + 1 ); // <A href="https://community.jmp.com/" target="_blank">
hreftext = Regex( linktext, "href\s*=\s*(\!"|')(.*?)(\1)", "\2" );// use regex to get the href value
if( !Is Missing( hreftext ), // sometimes there isn't one
dt << addrows( 1 );//
irow = N Rows( dt );//
dt:link[irow] = hreftext;//
dt:description[irow] = desc; //
);//
, // else
Break() // no more end tags. there is maybe a mess of javascript.
);//
pos = Max( pos, p5 + 3 ); // advance past the one just found
Wait( 0 );
);
stoptime = Tick Seconds();
dt << endDataUpdate;
Show( stoptime - starttime ); // .5 sec, 127 links
// using pattern matching and regex
// this is about 5X faster and skips over the garbage in the <SCRIPT> sections
// two patterns, one for &amp;amp;amp;lt;a&amp;amp;amp;gt; links and one for &amp;amp;amp;lt;script&amp;amp;amp;gt; to skip over
linkpat = "&amp;amp;amp;lt;a " + Pat Break( "&amp;amp;amp;gt;" ) &amp;amp;amp;gt;&amp;amp;amp;gt; linktext + "&amp;amp;amp;gt;" + Pat Arb() &amp;amp;amp;gt;&amp;amp;amp;gt; desctext + "&amp;amp;amp;lt;/a&amp;amp;amp;gt;";
scriptpat = "&amp;amp;amp;lt;script" + Pat Break( "&amp;amp;amp;gt;" ) + "&amp;amp;amp;gt;" + Pat Arb() + "</SCRIPT>";
dt = New Table( "patmatch", New Column( "description", Character, "Nominal" ), New Column( "link", Character, "Nominal" ) );
Wait( .1 );
dt << beginDataUpdate;
startTime = Tick Seconds();
rc = patmatch( txt,
patrepeat( // repeat the pattern until no more
(linkpat + pattest(// run some JSL for the linkpat...
desc = Regex( desctext, "<[^>]*>", "", globalreplace ); // remove span, etc tags
hreftext = Regex( linktext, "href\s*=\s*(\!"|')(.*?)(\1)", "\2" );//
if( !Is Missing( hreftext ), //
dt << addrows( 1 );//
irow = N Rows( dt );//
dt:link[irow] = hreftext;//
dt:description[irow] = desc; //
);//
1; // pattest needs this to succeed
)) | scriptpat /* maybe skip a script */ | /* maybe skip to the next tag */ (Pat Len( 1 ) + Pat Break( "<" ))
),
NULL,IGNORECASE
);
stoptime = Tick Seconds();
dt << endDataUpdate;
Show( stoptime - starttime ); // .5 sec, 128 links
Show( rc ); // should be 1, not 0
///////////////////////////////////////
// text explorer can also do this:
dt=New Table( "textexplorer",
Add Rows( 1 ),
New Column( "text", Character, "Nominal", Set Values( evallist({txt}) ) )
);
dt<<TEXT explorer=""></TEXT></A>Re : Comment utiliser la substitution regex <*> ?Je souhaite utiliser directement JSL via JMP pour obtenir le titre de la page et la liste des liens.
Par exemple : cette page Web de la communauté JMP,

u="https://community.jmp.com/t5/Discussions/bd-p/discussions";txt=loadtextfile(u);
t1="";offset=Contains(txt,t1);
If(offset,txt=SubStr(txt,offset+4,Length(txt)));
t2="";offset=Contains(txt,t2,-1);
If(offset,txt=SubStr(txt,1,offset-1));
txt=Substitute(txt," ","","message">","","Discussions/","Discussions/>");
txt=Substitute(txt,"<(.[^>]{0,})>","","\!n","","\!r","");
Re : Comment utiliser la substitution regex <*> ?Je ne sais pas si vous posez encore une question. Si vous essayez toujours de faire fonctionner quelque chose, j'aurais besoin de savoir ce que vous essayez de faire.
Essayez-vous d'utiliser un éditeur de texte pour reformater le fichier dans un fichier délimité par des tabulations que JMP peut lire ?
Re : Comment utiliser la substitution regex <*> ?Merci Craig!
J'utilise la substitution habituelle de "EmEditor"
<(.[^>]{0,})>Scénario:
document.selection.Replace("<(.[^>]{0,})>","\\t",eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF);Re : Comment utiliser la substitution regex <*> ?J'ai écrit du code C dernièrement. C utilise \" pour échapper à un " mais JSL utilise \!" pour échapper à un ".
Tous les trois " à l'intérieur de la chaîne " ont besoin de l'échappement JSL.
Re : Comment utiliser la substitution regex <*> ?Je vous ai dit qu'il n'avait pas été testé... utiliser
\!"
pour les évadés"
Re : Comment utiliser la substitution regex <*> ?Merci Craig!
J'ai essayé l'opération, JSL n'a pas pu s'exécuter.


Re : Comment utiliser la substitution regex <*> ?Je pense que vous voulez des formules séparées pour les colonnes b, c, ...
La formule de la colonne b doit extraire une partie de la chaîne href.
La formule de la colonne c doit extraire une partie de la chaîne id.
Les formules exactes peuvent être assez simples si les données ont la même forme sur chaque ligne. Par exemple, s'il y a toujours un nombre juste avant pour la colonne b, (le code non testé suit)
regex(a, "(\d+)", "\1")
pourrait fonctionner. Décomposer ce modèle :
- (\d+) - les parenthèses créent le groupe de capture \1, \d est un chiffre, + est un ou plusieurs
- - texte littéral qui doit suivre les chiffres
- "\1" - insère le groupe de capture 1 dans le résultat
De même, si le texte de la colonne c est toujours identifié par id=,
regex(a,"id=\"[^\"]*\"")
pourrait fonctionner.
Ce modèle utilise \" Trois des endroits pour représenter un guillemet à l'intérieur d'une chaîne JSL entourée de guillemets. Si nous supprimons les guillemets extérieurs et déséchappons les guillemets intérieurs, la chaîne regex voit est<STRONG> id="[^"]*"</STRONG> qui se décompose en
- match identifiant= et le "
- [^"] est une classe de caractères qui correspond à tout caractère qui n'est PAS un "
- * signifie zéro ou plus du non- " personnages
- suivie par "
Une analyse simple comme celle-ci fonctionnera généralement sur des données bien comportées. Dans le cas général, vous pourriez avoir besoin de modèles plus compliqués (s'il pourrait y avoir une autre chaîne id=, etc.).