我使用"表创建者"创建一个规则列表,然后将其馈送到"基于规则的行拆分器(字典(">
规则的形式如下:
$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"
对于输入(来自表创建者(She said: "1/2 is half", but in BASIC the integer division is denoted by
它将生成match
编辑:解析器和语法描述确认了这些。