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