无法正确逃脱KNIME中的规则

时间:2019-02-13 15:50:22

标签: escaping knime

我使用“表创建者”创建规则列表,然后将其馈送到“基于规则的行分隔符(词典)”

规则的格式为:

$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\""

根据文档,最后一个应该是正确的语法,但也会失败,并显示以上错误代码。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

在KNIME论坛上进行了长时间讨论后找到了答案。为了完整起见,在此处发布答案:

这里有两种情况,解决方案是分别处理它们,一个接一个。

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

这是KNIME禁止的。像这样将字符串封装在斜杠中:

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

2)您的字符串包含斜杠

使用双引号将字符串括起来,如下所示:

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

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

答案 1 :(得分:0)

您不能使用引号(")中的字符串进行转义,但是可以使用类似于Perl的字符串,其中起始符号是斜杠字符(/),尽管您可以这样做不需要转义"。 (尽管您需要使用/字符对\进行转义,如果需要也可以对其进行转义。)

示例:

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

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

编辑:parsergrammar description确认这些。