繼續詢問正則表達式分割我犯了一個錯誤。編寫這樣的代碼不會得到正確的結果。
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");需要獲得:
[{op},{q}]那麼如何寫JSL。 非常感謝!
回复:繼續詢問正則表達式分割如果數據是 json 或 xml,則應使用 JMP 的 json/xml 解析器。 為這些嵌套結構編寫解析器並不容易,僅靠正則表達式是不夠的。 將 xml/json 導入到表中,然後查找行和列是一個不錯的選擇。
如果必須以其他方式處理數據,則只需一個簡單的 JSL 循環和一堆正則表達式測試即可,如下所示:
txt = loadtextfile(...);
ok=1;
while( ok,
... try various regex that remove a bit of data from txt ... set ok to 0 if nothing works.
)
這適用於小文件,並且可以輕鬆維護。 但是一個有很多數據的大文件會太慢,因為從一個大的 txt 字符串中刪除一些數據會復制很多數據,每次刪除。 (這是一個 n^2 問題:文件大小加倍將使運行時間增加 4 倍。)
對於大文件,最好編寫一個不修改輸入字符串的單一模式匹配。 您可以在匹配整個文件的 patRepeat() 模式中使用正則表達式或模式,您將使用 patTest(... ;1) 在匹配中運行一些 JSL,將解析結果保存到 JSL 矩陣或列表中或關聯數組。 在 JMP 有內置的 json 解析器之前, @XanGregg我寫了一些JSL 解析 json 文件. 它仍然是一個很好的例子,但 JMP 的內置解析器更好。
這是其他一些具有 JSL 解析文件的帖子patMatch(... patRepeat( 模式 ) ... ) .
https://community.jmp.com/t5/Uncharted/The-Other-Kind-of-Model/ba-p/231703解析 3D 模型的數據文件
https://community.jmp.com/t5/Uncharted/Web-Logs/ba-p/29389解析 Apache 日誌文件
https://community.jmp.com/t5/Uncharted/WordNet/ba-p/28984解析wordnet文件
https://community.jmp.com/t5/Uncharted/Pronounce-Elephant/ba-p/21272解析 CMU 音素文件
我經常使用 >>log() 函數來調試複雜的模式匹配。
https://community.jmp.com/t5/Uncharted/Backtracking-Secrets/ba-p/20984使用>>日誌()用於調試
和
https://community.jmp.com/t5/Uncharted/Pattern-Matching/ba-p/21005介紹patMatch()
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008介紹正則表達式()
回复:繼續詢問正則表達式分割因為我需要遍歷這樣的東西。
我還是想學習如何使用正則化來去除多餘的數據,並保留有用的數據,以便用 JSL 進行持續處理。非常感謝!
回复:繼續詢問正則表達式分割感謝高手的幫助!
我下載了 JMP15 並學會瞭如何做到這一點。
我比較了獲取數據的不同方法。我了解它們之間的區別。

回复:繼續詢問正則表達式分割JMP 15 在處理這個 JSON 數據方面做得很好(將文件從 .txt 重命名為 .json,這樣會更容易@賈斯汀_奇爾頓); JMP 14 似乎無法正確處理這種 json 情況。 這是使用最佳猜測並添加堆棧選項的 JMP 15 導入:
Best Guess is under the red triangle最佳猜測位於紅色三角形下方你可能想做兩個這樣的導入:
get the little table of column names獲取列名的小表
get the bigger table of data獲取更大的數據表
您可以省略不需要的列。 您可以將小表中的列名應用到大表,將 value0 重命名為 2018。
回复:繼續詢問正則表達式分割另一個代碼是
"\[[^\[]+(?=}$)"
回复:繼續詢問正則表達式分割我在 VBA 社區中獲得了兩個正交代碼,但我仍然不會將它們更改為 JSL 代碼。
求高手指導。謝謝!
Sub t()
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "^(?:.*?(\[.*?]))*|."
reg.Global = True
Cells(1, 2) = reg.Replace(Cells(1, 1).Value, "$1")
End Sub
回复:繼續詢問正則表達式分割我知道的還不夠。
我以為只是分區
從...開始 :[{
並以第二個}]
所以可以得到 [{...}] 和它們之間。
看來我原來的理解太倉促了。
謝謝!
回复:繼續詢問正則表達式分割另一個想法是為嵌套數據結構(列表?)設計和編寫解析器以流式傳輸文本,構建數據,然後收集所需的值。
回复:繼續詢問正則表達式分割實際文本比您提出並我們解決的示例要復雜得多。
你之前發過這個問題。 然後我嘗試先將文本轉換為 JMP 列表,然後遍歷項目,而不是嘗試使用整個文本。 JMP 一路與我抗爭,但我嘗試過的都沒有奏效。 也許其他人知道如何獲取列表。 看起來很簡單。 我認為使用 Regex() 處理字符串會更直接,因為文本被分解為列表項。
回复:繼續詢問正則表達式分割上面的實際數據代碼仍然沒有達到標準。
我不認為我找到了鑰匙。

請高手繼續指導。謝謝!
回复:繼續詢問正則表達式分割另一種形式:
Names Default to Here( 1 );
string = "abcdef{:[[ghi]]:[{op},{q}]}";
c = Regex( string, "\{:.+:(.+)\}", "\1" );回复:繼續詢問正則表達式分割這是一個潛在的替代方案:
c = Regex( "abcdef{:[[ghi]]:[{op},{q}]}", "\!\[(\{\w+\},*)+]" );回复:繼續詢問正則表達式分割這是我的做法:
Names Default To Here( 1 );
x = "abcdef{:[[ghi]]:[{op},{q}]}";
c=word(1,word(3,x,":"),"]") || "]";回复:繼續詢問正則表達式分割它也不起作用:
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]{([^\]]*)\]", "[{\1]");