如何在Watson中使用getMatch在两个字符串之间获取文本

问题描述 投票:0回答:1

我正在使用Ibm Watson助手来获得易于理解的结构。其中之一是检索两个单词之间的字符串。

句子就像;

application song name çalar mısın?

application'x song name çalar mısın?

并且我想在这句话中得到“歌曲名称”。歌曲名称可以是任何名称。

正则表达式在此页面上工作正常:regexr.com/4ltp1

"PLAY_SONG": "<? input.text.getMatch('(?=(?!application)\\s).+(?=\\s+çal)',0) ?>"

[当我尝试执行该命令时,出现错误,如下所示。

[使用对话框节点ID [handler_3_1569393700920]的上下文更新上下文时出错。对话框节点上下文为[{“ category”:“ action”,“ PLAY_SONG”:“”}}]。 RegEx模式语法错误:解析正则表达式时出错:无效或不受支持的Perl语法:(?=

在这种情况下正确的方法是什么?

regex syntax watson-assistant
1个回答
0
投票

您正在使用不支持lookbehinds的正则表达式引擎。

在这里,您可以通过使用嵌套的超前行除去正向后行并依靠capturing group来解决问题:

"PLAY_SONG": "<? input.text.getMatch('application[^ ]* +(.*) çal', 1) ?>"

记住1参数,该参数告诉getMatch返回用括号括起来的正则表达式部分捕获的匹配部分。

请参见regex demo

详细

  • [application-文字子字符串
  • [[^ ]*-0+个空格以外的字符
  • [(.*)-捕获组1:尽可能多0个字符]
  • [+-0+空格
  • [çal-文字子字符串。
© www.soinside.com 2019 - 2024. All rights reserved.