继续询问正则表达式分割我犯了一个错误。编写这样的代码不会得到正确的结果。
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]");