我使用“表创建者”创建规则列表,然后将其馈送到“基于规则的行分隔符(词典)”
规则的格式为:
$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\""
根据文档,最后一个应该是正确的语法,但也会失败,并显示以上错误代码。我在做什么错了?
答案 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
编辑:parser和grammar description确认这些。