如何在 Bot Composer 的正则表达式中使用捕获组

How do I use capture groups in Regular Expressions in Bot Composer

我正在尝试使用 Bot Framework Composer 构建 Microsoft Teams 机器人。我想做的是创建与 ServiceNow 的集成。目标是如果有人在群组中发布记录编号(例如 REQ0123456、INC0123456、KB0123456)或直接聊天(与机器人),机器人将查找该记录并提供卡片或记录的简短摘要加入聊天。

为了避免为每种记录类型创建完全独立的意图,我希望使用 RegEx 将匹配项收集到 2 个捕获组中;一个用于 tbl_code,一个用于 number

这是用户输入的条目:

> add some example phrases to trigger this intent:
- look up {conversation.sn_record.tbl_code=REQ}{conversation.sn_record.number=0123456}
- lookup {conversation.sn_record.tbl_code=REQ}{conversation.sn_record.number=0123456}
- {conversation.sn_record.tbl_code=REQ}{conversation.sn_record.number=0123456}
- lu {conversation.sn_record.tbl_code=REQ}{conversation.sn_record.number=0123456}

> entity definitions:
@ regex  sn_record tbl_code, number = /([a-z]{2,4})([0-9]{7})/mi

我遇到的问题 我不知道如何从各个捕获组中取回值。我想将它们分开,以便我可以确定需要查询哪个 table 。我可能只使用整个匹配项和 ServiceNow 中的搜索 API 来获取整个记录字符串,但我仍然想知道如何使用捕获组值。

我目前正在使用 turn.recognized.text,但我认为这不是我想要做的事情的最佳方法。这 returns 整个正则表达式匹配。

我对这个框架还很陌生,所以请多关照。 :) 如果我可以提供更多信息,请告诉我。

谢谢大家

此致, 乔什

我能够使用 ToDosSample 机器人中的示例解决这个问题。

答案是使用命名的捕获组,然后将它们添加到对话框属性以在相应的对话框中使用。

这里是我必须做出的更改以供参考:

  • New Regex

    • (?<sn_record>(?<tbl_code>[a-z]{2,4})(?<numbers>[0-9]{7}))
  • New Dialog Properties

    • dialog.sn_record = @sn_record
    • dialog.sn_tbl_code = @tbl_code
    • dialog.sn_numbers = @numbers
  • 新回复

    • - Okay, looking up ${dialog.sn_tbl_code}${dialog.sn_numbers}