Как получить текст между двумя строками с помощью getMatch в Watson - PullRequest
1 голос
/ 30 сентября 2019

Я работаю над помощником 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) ?>"

Когда я пытался выполнить это, я получаю ошибку, как вы можете видеть ниже.

Ошибка при обновлении контекста контекстом идентификатора узла диалога [handler_3_1569393700920]. Контекст узла диалога: [{"category": "action", "PLAY_SONG": ""}]. Ошибка синтаксиса шаблона RegEx: ошибка разбора regexp: недопустимый или неподдерживаемый синтаксис Perl: (?=

Как правильно в этой ситуации?

1 Ответ

3 голосов
/ 30 сентября 2019

Вы используете движок регулярных выражений, который не поддерживает вид сзади. Точность. для Watson Assistant документы движком регулярных выражений является RE2, и он не поддерживает ни lookbehinds, ни lookaheads.

Здесь вы можете решить проблему, удалив положительный lookbehind с помощьювложенный просмотр и полагайтесь на группу захвата , используя extract метод :

String.extract (Stringрегулярное выражение, целочисленный индекс группы) Этот метод возвращает строку из ввода, которая соответствует указанному шаблону группы регулярных выражений. Он возвращает пустую строку, если совпадение не найдено

Использовать

"PLAY_SONG": "<? input.text.extract('application\S*\s+(.*?)\s+çal', 1) ?>"

Уметь аргумент 1, который говорит getMatch вернуть часть совпадения, захваченную с помощьюЧасть регулярного выражения в скобках.

См. демонстрационный пример регулярного выражения

Подробности

  • application - буквенная подстрока
  • \S* - 0+ символов, кроме пробелов
  • \s+ - 1+ пробелов
  • (.*?) - Захват группы 1: любые 0+ символов, всего нескольковозможно
  • \s+ - 1+ пробелов
  • çal - буквальная подстрока.
...