在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
就像“ABC ABC”中包含的“ABC”一样
规则引擎中的“LIKE”是否仅允许硬编码字符串进行比较?其他想法实现这一目标?感谢您的帮助!
带有String Manipulation的regexMatcher
节点可以在这里提供帮助,虽然结果将是String(默认情况下值为True
/ False
),因此如果需要更多节点,则需要更多节点(如果不同的字符串,则可以使用?
/ :
三元运算符,如== "True" ? "when true" : join("when false it was because '", $columnReference$, "' was not found")
)。
您可以像这样使用regexMatcher
(\Q
/\E
有助于避免将Reference
列中的内容视为正则表达式(除非它包含\E
)):
regexMatcher($text$, join(".*?\\Q", $Reference$, "\\E.*+")) == "True" ? "vrai" : "faux"
规则引擎允许使用LIKE运算符的通配符,但它不允许将通配符与列结合使用,这意味着以下方法可以正常工作:
$column1$ LIKE "*test*" => "1"
以下是允许的,但不能正常工作:
$column1$ LIKE "*$column2$*" => "1"
原因是当你得到双引号时,$ not不被识别,所以你没有得到第2列的值。相反,你每次都得到相同的字符串:qazxsw poi这不是你想要的。
此外,您可以在String Manipulation或Column Expressions节点中使用"*$column2$*"
函数,该节点将从column2中的column1返回字符串值的第一个位置。如果没有找到,该函数将返回-1。使用Rule Engine节点跟随它以添加适当的指示。