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

问题描述 投票:0回答:2

在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”是否仅允许硬编码字符串进行比较?其他想法实现这一目标?感谢您的帮助!

java string comparison knime
2个回答
2
投票

带有String ManipulationregexMatcher节点可以在这里提供帮助,虽然结果将是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"

regexMatcher($text$, join(".*?\Q", $Reference$, "\E.*+"))


0
投票

规则引擎允许使用LIKE运算符的通配符,但它不允许将通配符与列结合使用,这意味着以下方法可以正常工作:

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

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

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

原因是当你得到双引号时,$ not不被识别,所以你没有得到第2列的值。相反,你每次都得到相同的字符串:qazxsw poi这不是你想要的。

此外,您可以在String Manipulation或Column Expressions节点中使用"*$column2$*"函数,该节点将从column2中的column1返回字符串值的第一个位置。如果没有找到,该函数将返回-1。使用Rule Engine节点跟随它以添加适当的指示。

© www.soinside.com 2019 - 2024. All rights reserved.