JSL ChallengeSto cercando di capire un modo semplice ed elegante per cercare una stringa di testo per tutte le occorrenze di un dato pattern e ottenere le loro posizioni senza usare un ciclo. Munger mi dirà quanti ce ne sono, ma non dove sono. Posso pensare a qualche giro di modi, ma sento che mi manca qualcosa.
Ri: JSL ChallengeSembra un'idea di un libro di cucina.
https://community.jmp.com/t5/JSL-Cookbook/Search-a-string-for-all-occurrences-of-a-pattern/ta-p/79761
Ri: JSL ChallengeAh ok. Mi stavo solo chiedendo. Ho avuto persone che facevano una domanda simile ma in termini di amminoacidi o basi all'interno di una colonna e ho detto che BLAST e altri di questi strumenti sono il posto migliore per questo tipo di domande. Ho avuto alcune persone alla ricerca di stringhe specifiche all'interno di una colonna di testo (come ad esempio i commenti). Ma l'esploratore di testi ora riempirebbe quel vuoto per quei tipi di domande (date parole di arresto, ecc.)Ri: JSL ChallengeOnestamente, questa è solo una domanda generale a cui ho pensato nel processo di fare qualcosa di simile. So di aver attraversato il problema in passato, ma posso ricordare il contesto. Allo stesso modo, mi piacerebbe essere in grado di elencare le stringhe di testo che identificano quegli elementi che contengono una stringa di destinazione (senza dover usare un ciclo).
Ri: JSL ChallengeCiao Don,
Per quale problema stai cercando di risolvere con questa sfida JSL. Spero non di genomica. C'è uno strumento chiamato BLAST che le persone usano per la ricerca di sequenze che fa qualcosa di simile con una logica fuzzy inclusa e un meccanismo di punteggio.
Se solo per l'esplorazione del testo, non ne sono del tutto sicuro. Immagino che sia come usare un comando find in Word, TextPad, PDF Viewer o Web Browser che cerca una stringa in un corpus di testo e ti dice dove si trova. In caso affermativo, perché non usare quegli strumenti invece di reinventare la ruota con JSL? o usare Text Explorer e forzarlo a cercare quello che vuoi?
Sto solo cercando di capire il contesto.
Chris
Ri: JSL Challenge
Ho appena realizzato che non funzionerà finché non avrai regolato le posizioni per il fatto che hai modificato una stringa di lunghezza k in una stringa di lunghezza 1. Quindi, se la sottostringa era più di 1 carattere, le posizioni devono essere regolate. Da qui la clausola finale "se".
str = "acdljkdfjhcdlkjgiucdlekjrfcdcd";
substr = "cd";
pos = loc(words(substitute(str, substr, "#"), ""), "#" );
if (length(substr) > 1, pos += (0::(length(substr)-1)*(nrow(pos)-1)::(length(substr)-1))`);
Ri: JSL Challenge**************** Questo ha bisogno di adjustmentL: vedere la mia risposta successiva *********************
Se puoi contare su un personaggio che NON appare nella stringa, potresti fare qualcosa del tipo:
str = "abclkhsdfcdslkjscdlkjlkjcdkljcdcd";
loc(words(substitute(str, "cd", "#"), ""), "#" );
Ri: JSL ChallengePenso che potresti essere in grado di creare una soluzione basata su questo esempio dall'indice Scripting:
Names Default To Here( 1 );
source = "believe";
// [aeiou] matches exactly one vowel
// .*? is a reluctant (vs greedy) match. try it without the ? to see the greedy behavior
// \1 is a back reference to the first ( group -- [aeiou] is inside the first ( group
matches = Regex Match(
source, // a variable allows updating some text
"([aeiou])(.*?)(\1)", // a regex with parens makes back references
">\2<" // the match is replaced by text that uses a back reference
);
Show( source, matches );
// results:
// source = "b>li<VE></VE>