在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”仅允许硬编码的字符串进行比较吗?其他想法可以实现这一目标?谢谢您的帮助!
答案 0 :(得分:2)
带有regexMatcher
的{{3}}节点可以为您提供帮助,尽管结果将为String(默认值为True
/ False
),因此其他节点为例如,如果需要一个数字,则为必填项(如果使用不同的字符串,则可以使用?
/ :
三元运算符,例如== "True" ? "when true" : join("when false it was because '", $columnReference$, "' was not found")
)。
您可以像这样使用regexMatcher
(String Manipulation有助于避免将Reference
列中的内容视为正则表达式(除非包含\E
时除外):< / p>
regexMatcher($text$, join(".*?\\Q", $Reference$, "\\E.*+")) == "True" ? "vrai" : "faux"
答案 1 :(得分:0)
Rule引擎允许使用带有LIKE运算符的通配符,但不允许将通配符与列结合使用,这意味着以下各项可以正常工作:
$column1$ LIKE "*test*" => "1"
以下内容也是允许的,但不能正常工作:
$column1$ LIKE "*$column2$*" => "1"
原因是当您获得双引号$时无法识别,因此您不会从column2中获取值。而是每次都得到相同的字符串:"*$column2$*"
并不是您想要的。
另外,您可以在“字符串操作”或“列表达式”节点中使用indexOf()
函数,该函数将从column2的column1返回字符串值的第一个位置。如果找不到,该函数将返回-1。在“规则引擎”节点之后添加适当的指示。