0

我正在尝试在 KNIME 中使用 String Manipulation 中的 regexMatcher,但它不起作用。我正在写以下内容: regexMatcher($Document$,"/\w") 当我想提取所有具有 /s 或 /p 或 w/p 或 /200 的句子时。但是,即使我的表中有这样的情况,也没有检索到任何内容。我会感谢你的帮助。

4

1 回答 1

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是匹配整个字符串,因此您必须在.*?要查找的值之前添加(非贪婪匹配任何内容),并在要查找.*的表达式之后添加(贪婪匹配任何内容)。(显然,如果我误解了你的问题,语义可能已经是你想要的。)

顺便说一句:如果您想过滤,您应该检查基于规则的行过滤器节点,因为它提供了一个直接按正则表达式过滤的选项。它使用不同的转义规则(对于 isOK 选项):

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

示例工作流程

于 2016-10-04T18:18:30.327 回答