无法正确转义 KNIME 中的规则

Unable to properly escape rules in KNIME

我使用 "table creator" 创建一个规则列表,然后将其提供给 "rule-based row splitter (dictionary)"

规则的形式为:

$colname$="somevalue"    TRUE

我已经多次创建此设置并且运行良好。 但是,我需要比较的一些字符串值包含双引号。根据官方文档,它们需要使用反斜杠进行转义。我尝试了各种排列,但总是失败。

错误信息:

ERROR Rule-based Row Splitter (Dictionary) 0:228      Execute failed: 
java.text.ParseException: Line: 306: Expected: =>
$value$="2\"" => TRUE

规则格式化,我试过了,都失败了:

$col$=5"
$col$=5\"
$col$="5""
$col$="5\""

根据文档,最后一个应该是正确的语法,但它也因上述错误代码而失败。我做错了什么?

在 KNIME 论坛中经过长时间的讨论找到了答案。为了完整起见,在此处发布答案:

这里有两个问题案例,解决方法是分别处理,一个一个地处理。

1) 您的字符串包含双引号:

这是 KNIME 禁止的。像这样用斜杠封装你的字符串:

$colname$ = /and she said: "hi"/

2) 您的字符串包含斜线:

用双引号括起您的字符串,如下所示:

$colname$ = "i need size 40 3/4"

如果您在同一个字符串中混合了两者,则需要使用代码片段。

你不能用引号中的字符串转义 ("),但你可以使用类似 Perl 的字符串,其中开始结束符号是斜杠字符 (/),尽管有你不需要转义"。 (您需要使用 \ 字符转义 /,如果需要,也需要转义。)

示例:

$column1$ = /She said: "1\/2 is half", but in BASIC the integer division is denoted by \/ => "match"
TRUE => "no match"

对于输入(来自 Table CreatorShe said: "1/2 is half", but in BASIC the integer division is denoted by \ 它将产生 match

编辑:parser and the grammar description 确认这些。