String Manipulation KNIME中的regexMatcher

时间:2016-10-04 16:48:02

标签: string knime

我正在尝试在KNIME中使用String Manipulation中的regexMatcher但它不起作用。我写的是以下内容: regexMatcher($文件$, “/ \ W”) 当我想提取所有/ s或/ p或w / p或/ 200的句子时。然而,即使我在我的表中有这样的情况,也没有找到任何东西。我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我得到了以下内容:

|Document      |isOK |other|strict|
|--------------|-----|-----|------|
|Some /p with q|True |False|False |
|/200          |True |True |False |
|/p            |True |True |True  |
|/s            |True |True |True  |
|w/p           |True |False|False |
|no slash      |False|False|False |

表达式:

  • isOK:regexMatcher($Document$, ".*?/\\w.*")(我想这就是你所追求的。)
  • 其他:regexMatcher($Document$, "/\\w.*")
  • 严格:regexMatcher($Document$, "/\\w")

(文档在最后一个可见字符后不包含任何内容。)

您可能遇到的问题是字符串操纵器节点的转义和regexMatcher的语义。

其中的字符串文字只有一个Java字符串,因此您必须转义\(以及其他一些字符),因此它变为\\

regexMatcher的语义是匹配整个String,所以你必须在你要查找的值之前添加.*?(非贪婪匹配任何东西)和.*(贪婪)在你正在寻找的表达式之后匹配任何东西。 (显然,如果我误解了你的问题,那么语义可能已经是你想要的了。)

BTW:如果你想过滤,你应该检查Rule-based Row Filter节点,因为它提供了一个直接按正则表达式过滤的选项。它使用不同的转义规则(对于isOK选项):

  • $Document$ MATCHES ".*?/\w.*" => TRUE(引号内不允许转义)
  • $Document$ MATCHES /.*?\/\\w.*/ => TRUE(在斜杠中允许转义(/\需要转义,但不需要"))

Example workflow