是否可以将实体放入正则表达式中?例如,假设实体"@pizza-toppings"
包含浇头:
"topping": "<? input.text.extract('(?i).+(@pizza-toppings)(?-i)', 1) ?>"
因此,如果@pizza-toppings
与"洋葱"匹配,那么"(?i).+(@pizza-toppings)(?-i)"
将是"(?i).+(onion)(?-i)"
。如果它匹配"cheese"
,那么它将是"(?i).+(cheese)(?-i)"
,依此类推。
我一直在努力寻找解决方案,但到目前为止我什么也没找到。
在没有测试的情况下,在我注意到您将实体引用包含到字符串中之后。尝试这样做:
"topping": "<? input.text.extract('(?i).+('+@pizza-toppings+')(?-i)', 1) ?>"
通常,当您使用模式实体时,这将匹配模式,并使用实体定义中的硬编码值添加实体。但是,如果您想要匹配的值,您应该按照文档中的建议进行操作(https://console.bluemix.net/docs/services/conversation/entities.html#creating-实体(,并在节点响应部分中添加创建上下文变量并将模式匹配位的值分配给该上下文变量的语句:
{
"context" : {
"topping": "<? @pizza-toppings.literal ?>"
}
}
因此,如果你的披萨浇头与洋葱匹配,那么你的上下文变量浇头的值将为"洋葱"。
例如,在本示例中https://github.com/IBM/watson-assistant-app-connect有一个实体@customerId与客户ID"[a-zA-Z\d]{15,18}"匹配。
在对话框节点AppConnect的"然后检查:"中,它检查@customerId实体。在"Then-set context:"中,它将$id设置为",在上下文变量$id中设置与@customerId匹配的值。