Ошибка в шаблоне в Watson Assistant Entity - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать шаблон регулярных выражений для Watson Assistant Entity, который определяет даты, подобные жирным:

  • дата 25/2/2020 30/2 / 2020
  • дата / 25/2 30/2 из
  • дата 18/02 из
  • дата 12/12 / из
  • дата 12/12 /
  • дата 12/12

Для этого я использовал следующее выражение:

( \b(?:3[01]|[12][0-9]|0?[1-9])([\-/.])(1[1-2]|0?[1-9])(?![\-/.])\b )

Это выражение работает хорошо, проблема в том, что механизм сравнения шаблонов, который используется в Watson, имеет синтаксические ограничения.

Шаблоны сущностей не могут содержать:

  • Положительные повторения (например, x * +)
  • Предыдущие ссылки (например, \ g1)
  • Условные ветви (например, (? (Cond) true))

На данный момент , Я не могу использовать (?! [- /.]), Чтобы избежать таких дат, как '25 /02/2020 '.

Как я могу это сделать?

Заранее спасибо,

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

Во-первых, этот способ может работать только в США (я попробовал его с другим $timezone, но не сработал, но это может быть проблемой "попробовать его").

Включить @sys-date. Если ваш пользователь говорит «дата 02/18 из», он выберет 02/18 как 2020-02-18. Вы можете работать с датой проще.

Другой подход заключается в создании облачной функции, которая будет выполнять сложные регулярные выражения для вас и передавать ее обратно в Watson Assistant.

1 голос
/ 10 февраля 2020

Вы можете попробовать это:

[ ]((?:3[01]|[12][0-9]|0?[1-9])([\-/.])(1[1-2]|0?[1-9]))(?:$|[^\d\-/.])

Я предполагаю, что вам нужны разные группы захвата, которые вы использовали в своем вопросе. Если это не так, вы можете удалить их или заменить их на группы без захвата (?:)

Я также предполагаю, что вам не нужно захватывать пространство на группе захвата, поэтому я помещаю его в сторону.

Итак, основная идея c заключается в том, что перед вашим выражением вы можете захотеть найти либо конец строки / строки $, либо какой-либо символ, который не является числом, -, / или ..

0 голосов
/ 10 февраля 2020

У меня нет Watson Assistant Entity для тестирования, но это должно работать:

\s\d?\/\d?\s

или

\s\d{1,2)\/\d{1,2}\s

или

\s(\d|\d\d)\/(\d|\d\d)\s

, где \s - это пробел, а \d - это любой ди git

Сайт не предоставляет надлежащего руководства по возможностям движка регулярных выражений (по крайней мере, я его не нашел). Поэтому я предоставил обходные пути для указанных ограничений.


Это не подтверждает, что даты являются действительными c, но, поскольку 30/2 (30 февраля) является действительным совпадением, должно быть нет проблем.

...