KNIME:比较一列是否包含另一列的子集

时间:2019-03-26 19:01:06

标签: java string comparison knime

在Knime中,我试图比较一列中的值是否包含在另一列中。我试图在规则引擎中使用“ LIKE”来执行此操作,但无法使通配符与列输入(而不是字符串)一起使用。例如

For row1 I want to check if column 1, row 1 is within column 2, row 1
For row2 I want to check if column 1, row 2 is within column 2, row 2

类似于“测试ABCtest”中包含的“ ABC”

Rule Engine中的“ LIKE”仅允许硬编码的字符串进行比较吗?其他想法可以实现这一目标?谢谢您的帮助!

2 个答案:

答案 0 :(得分:2)

带有regexMatcher的{​​{3}}节点可以为您提供帮助,尽管结果将为String(默认值为True / False),因此其他节点为例如,如果需要一个数字,则为必填项(如果使用不同的字符串,则可以使用? / :三元运算符,例如== "True" ? "when true" : join("when false it was because '", $columnReference$, "' was not found"))。

您可以像这样使用regexMatcherString Manipulation有助于避免将Reference列中的内容视为正则表达式(除非包含\E时除外):< / p>

regexMatcher($text$, join(".*?\\Q", $Reference$, "\\E.*+")) == "True" ? "vrai" : "faux"

\Q/\E

答案 1 :(得分:0)

Rule引擎允许使用带有LIKE运算符的通配符,但不允许将通配符与列结合使用,这意味着以下各项可以正常工作:

$column1$ LIKE "*test*" => "1"

以下内容也是允许的,但不能正常工作:

$column1$ LIKE "*$column2$*" => "1"

原因是当您获得双引号$时无法识别,因此您不会从column2中获取值。而是每次都得到相同的字符串:"*$column2$*"并不是您想要的。

另外,您可以在“字符串操作”或“列表达式”节点中使用indexOf()函数,该函数将从column2的column1返回字符串值的第一个位置。如果找不到,该函数将返回-1。在“规则引擎”节点之后添加适当的指示。