我有一个名为其中存储了两个值“@material_number”的实体。
第一值是“material_number1”与图案(\ d {3})。(\ d {3})
第二个值是“material_number2”与图案(\ d {3})。(\ d {3})。(\ d {3})
当用户输入一个物料编号,我存储与所谓的“$ materialnumber”上下文变量的值,我设置这个变量的值设置为“?@material_number.literal?”。 并在年底机器人回答“ 哦,没关系,物料编号为$ materialnumber。”
的问题是,当用户输入一个物料编号,如“123.123.123”,机器人认为,材料数量是“123.123”。 基本上,它忽略了最后三位数字,并提示回“ 哦没事,材料数量为123.123”。
我能为了解决这种混乱呢?
我很快测试这一点,有两个问题。 首先,点( .
是一个特殊的通配符,需要进行转义。第二,沃森助手不支持完整的regex选项,似乎在较长键入数字时要匹配两个号码。
你可以简单地逃避使用\
和改变你的定义或使用地雷:
num1: (\d{3}\.){1}\d{3}
num2: (\d{3}\.){2}\d{3}
由于与正则表达式评价的麻烦我解决了在表达式本身。 沃森助理保持更长的匹配作为第二值(如果匹配的)。 下面的表达式如下如果长时间数量,material_number2,已经匹配,然后提取它的正确值。 它假定短(不正确的)匹配首先存储。
{
"context": {
"materialnumber": "<? @matrial_number:matnum2 ? entities.material_number[1].literal : entities.material_number[0].literal ?>"
}
}