Wie kann die Regex-Ersetzung <*> verwendet werden?Wie man Regex verwendet, um den Text von dt[1,"A"] durch Tabulatoren für jedes <*> zu ersetzen. Es erhält das mehrspaltige Ergebnis in Zeile 2.

Vielen Dank!
abc<AHREF>897"id="s897"</AHREF>
SkripterstellungBetreff: Wie kann die Regex-Ersetzung <*> verwendet werden?ignorieren Sie die 0,5 Sek., # Links-Kommentare in der JSL. Führen Sie Ihren eigenen Test durch.
Kommentare werden schnell schlecht, besonders beim Kopieren/Einfügen!
Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?/*
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>Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Ich möchte JSL über JMP direkt verwenden, um den Titel der Seite und die Linkliste zu erhalten.
Beispiel: diese JMP-Community-Webseite,

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","");
Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Ich bin mir nicht sicher, ob Sie immer noch eine Frage stellen. Wenn Sie immer noch versuchen, etwas zum Laufen zu bringen, müsste ich wissen, was Sie zu tun versuchen.
Versuchen Sie, die Datei mit einem Texteditor in eine tabulatorgetrennte Datei umzuformatieren, die JMP lesen kann?
Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Danke Craige!
Ich verwende die reguläre Ersetzung von "EmEditor"
<(.[^>]{0,})>Skript:
document.selection.Replace("<(.[^>]{0,})>","\\t",eeReplaceAll | eeFindReplaceRegExp,eeExFindSeparateCRLF);Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Ich habe in letzter Zeit C-Code geschrieben. C verwendet \" um einem " zu entkommen, aber JSL verwendet \!" um einem " zu entkommen.
Alle drei innerhalb der Zeichenkette " benötigen das JSL-Escape.
Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Ich habe Ihnen gesagt, dass es ungetestet war ... verwenden
\!"
für die Entflohenen“
Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Danke Craige!
Ich habe die Operation versucht, JSL konnte nicht ausgeführt werden.


Betreff: Wie kann die Regex-Ersetzung <*> verwendet werden?Ich denke, Sie möchten separate Formeln für die Spalten b, c, ...
Die Formel von Spalte b sollte einen Teil der href-Zeichenfolge extrahieren.
Die Formel von Spalte c sollte einen Teil der ID-Zeichenfolge extrahieren.
Die genauen Formeln könnten recht einfach sein, wenn die Daten in jeder Zeile die gleiche Form haben. Wenn zum Beispiel immer eine Zahl direkt vor für Spalte b steht, (es folgt ungetesteter Code)
regex(a, "(\d+)", "\1")
könnte funktionieren. Brechen Sie dieses Muster auf:
- (\d+) - die Klammern bilden die Erfassungsgruppe \1, \d ist eine Ziffer, + ist eins oder mehr
- - wörtlicher Text, der den Zahlen folgen muss
- "\1" - Fanggruppe 1 in das Ergebnis einfügen
Wenn der Text der Spalte c immer durch id= identifiziert wird,
regex(a,"id=\"[^\"]*\"")
könnte funktionieren.
Dieses Muster verwendet \" drei setzt um ein Anführungszeichen innerhalb einer JSL-Zeichenfolge darzustellen, die von Anführungszeichen umgeben ist. Wenn wir die äußeren Anführungszeichen entfernen und die Escapezeichen für die inneren aufheben, sieht die Zeichenfolge regex is<STRONG> id="[^"]*"</STRONG> was sich auflöst
- passen id= und die "
- [^"] ist eine Zeichenklasse, die mit jedem Zeichen übereinstimmt, das KEIN a ist "
- * bedeutet null oder mehr der nicht- " Figuren
- gefolgt von "
Einfaches Parsen wie dieses funktioniert normalerweise bei gut erzogenen Daten. Im allgemeinen Fall benötigen Sie möglicherweise kompliziertere Muster (wenn es eine andere id = Zeichenfolge usw. geben könnte).