【问题标题】:KNIME: Compare if One Column Contains a subset of another columnKNIME:比较一列是否包含另一列的子集
【发布时间】:2019-03-26 19:01:06
【问题描述】:

在 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

Like is "ABC" 包含在 "test ABCtest" 中

规则引擎中的“LIKE”是否只允许硬编码字符串进行比较?实现这一目标的其他想法?感谢您的帮助!

【问题讨论】:

    标签: java string comparison knime


    【解决方案1】:

    带有regexMatcherString Manipulation 节点可以在这里提供帮助,尽管结果将是字符串(默认值为True/False),因此如果需要例如数字,则需要更多节点(如果String不同,可以使用?/:三元运算符,如== "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"
    

    【讨论】:

      【解决方案2】:

      规则引擎允许通配符与 LIKE 运算符一起使用,但它不允许通配符与列组合,这意味着以下内容可以正常工作:

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

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

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

      原因是当你得到双引号时 $ 无法识别,所以你没有从 column2 获取值。相反,您每次都会得到相同的字符串:"*$column2$*",这不是您想要的。

      此外,您可以在 String Manipulation 或 Column Expressions 节点中使用 indexOf() 函数,该函数将在 column2 中从 column1 返回字符串值的第一个位置。如果未找到该函数将返回 -1。跟随规则引擎节点添加适当的指示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多