JSL挑戰賽我試圖找出一種直接和優雅的方式來搜索文本字符串以查找給定模式的所有出現並在不使用循環的情況下獲取它們的位置。芒格會告訴我有多少,但不是他們在哪裡。我可以想到幾個方面,但我覺得我錯過了一些東西。
回复:JSL挑戰賽看起來像一本食譜的想法。
https://community.jmp.com/t5/JSL-Cookbook/Search-a-string-for-all-occurrences-of-a-pattern/ta-p/79761
回复:JSL挑戰賽喔好吧。就是想。我曾經讓人們提出類似的問題,但就一欄中的氨基酸或鹼基而言,我提到BLAST和其他此類工具對於這類問題來說是更好的地方。我有一些人在一列文本中尋找特定的字符串(比如評論)。但是Text Explorer現在可以為這些類型的問題填補這個空白(給出停用詞等)回复:JSL挑戰賽老實說,這只是我在做類似事情的過程中想到的一個普遍問題。我知道我過去遇到過這個問題,但可以記住上下文。同樣,我希望能夠列出標識包含目標字符串的元素的文本字符串(無需使用循環)。
回复:JSL挑戰賽你好,唐,
你想用這個JSL挑戰來解決什麼問題。我希望不是基因組學。人們使用一種名為BLAST的工具進行序列發現,該工具與包含的一些模糊邏輯以及評分機制相似。
如果僅用於文本探索,我對此不太確定。我猜這就像在Word,TextPad,PDF Viewer或Web Browser中使用find命令一樣,在文本語料庫中搜索字符串並告訴你它找到的位置。如果是這樣,為什麼不使用這些工具而不是用JSL重新發明輪子?或者使用文本資源管理器並強制它查找你想要的內容?
只是想了解背景。
克里斯
回复:JSL挑戰賽
我剛剛意識到,在你將k長度字符串更改為1長字符串的事實調整位置之前,這將無效。因此,如果子串超過1個字符,則必須調整位置。因此最終的“if”條款。
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))`);
回复:JSL挑戰賽****************這需要調整L:見我以後的回复*********************
如果您可以將某些字符存入字符串中,則可以執行以下操作:
str = "abclkhsdfcdslkjscdlkjlkjcdkljcdcd";
loc(words(substitute(str, "cd", "#"), ""), "#" );
回复:JSL挑戰賽我認為您可以根據腳本索引中的此示例制定解決方案:
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>