从多种字符串中搜索子字符串我有一列名为失败,其中包含各种字符串。我喜欢搜索以“ex”开头的错误代码。错误代码是以“ex”开头的 10 个字符的字符串。并将第一个错误代码放入“第一个代码”列中,所有错误代码放入“所有代码”列中。这两列都设置了什么公式?抱歉再次打扰。我需要先快速完成手头的工作,然后再花时间学习 JMP 帮助文档。

基础数据分析与建模回复:从多种字符串中搜索子字符串这篇文章可能有助于从非结构化字符串中提取故障部件代码
回复:从多种字符串中搜索子字符串以下是创建这两列的一种方法
:fst 代码的公式
start = contains(:Failure,"0x");
if(start>0,substr(:Failure,start,start+10),"");
公式:所有代码
theCodes = {};;
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, start + 10 ) );
theString = Substr( theString, start + 10 );
);
concat items(theCodes, ",");回复:从多种字符串中搜索子字符串非常感谢您的及时帮助。使用公式,错误代码被拾取,但一些其他字符也出现了。我使用 left() 解决了它。但我想知道为什么其他字符会出现在那里?

回复:从多种字符串中搜索子字符串由于没有您的数据表来调试问题,我不确定问题是什么。尝试此修改,看看效果是否更好。
start = contains(:Failure,"0x");
x="";
if(start>0,x=substr(:Failure,start,start+10),"");
x;
回复:从多种字符串中搜索子字符串@txnelson感谢您花时间讨论这个话题。我再次尝试,但仍然失败。这是您调试的数据表。
回复:从多种字符串中搜索子字符串我的错误,
Substr元素的长度应该是Start,而不是Start+10。
第一个代码
start = Contains( :Failure, "0x" );
If( start > 0,
Substr( :Failure, start, 10 ),
""
);
所有代码
theCodes = {};
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, 10 ) );
theString = Substr( theString, start + 10 );
);
Concat Items( theCodes, "," );回复:从多种字符串中搜索子字符串非常感谢!
回复:从多种字符串中搜索子字符串如果您有可能混入了以 0x 开头但不是错误代码的消息,则简单的包含可能会起作用,但根据您向我们提供的示例,情况似乎并非如此(或者如果您有例如 0x123456,它比您定义的错误代码短)。
如果最终情况如此,我会查看正则表达式(你可以使用与 Jim 展示的包含类似的想法来处理 While 循环)。但你必须对允许的字符有充分的了解,才能构建稳健的模式以进行正确的匹配。
回复:从多种字符串中搜索子字符串@jthi感谢您的评论。我正在尝试使用正则表达式搜索以 0x 开头的子字符串。根据您推荐的帖子, “通过文本匹配新建列”是个好主意。我正在考虑如何为错误代码构建模式(或者错误代码不限于 10 个字符)。正则表达式的反向引用和捕获组说明可以帮助我理解相关的 JSL,但编写 JSL 对我来说有点困难。我认为我阅读的 JSL 示例越多,我学会编写 JSL 的速度就越快。回到主题,您能帮我展示错误代码的正则表达式模式吗?例如在您的帖子中,它是
failure_pattern = "[A-Z]+\d+[A-Z]?"
回复:从多种字符串中搜索子字符串根据您提供的示例数据表,使用 Regex() 函数提取第一个错误代码的公式是
Regex( :Failure, "[A-Z]+\d+[A-Z]?" )
Regex() 函数的定义和示例可在脚本索引中找到
回复:从多种字符串中搜索子字符串JSL 可能没有所有标志( Regex:为所有标志添加选项, 将标志添加到 Regex Match() 以查找所有不重叠的模式出现),但它仍然接受类似的模式。使用https://regex101.com/之类的网站来测试您的正则表达式模式(如果您不确定它们是否会将数据发送到某个服务器,请不要使用真实数据,除非您可以共享它),然后在 JSL 中尝试。regex101 等网站会向您解释该模式。
我没有正确定义您的错误代码,因此无法提供好的模式。我只知道它以 0x 开头,但我需要知道允许的字符,这些允许的字符是否有任何顺序以及如何确定它何时结束(如果有的话还有长度)。
回复:从多种字符串中搜索子字符串今天我花了一些时间阅读了脚本索引中的 Regex() 函数的定义和示例,并学习了正则表达式模式结构,例如 ([a-zA-Z])\s([0-9])。使用https://regex101.com/测试正则表达式模式的分享非常棒。
Regex() 或 Regex match() 是一个有点复杂的函数。我需要从社区中找到更多示例来练习 Regex() 的用法。非常感谢您分享的链接。