【问题标题】:What does Watson Assistant use to check regex?Watson Assistant 使用什么来检查正则表达式?
【发布时间】:2018-10-11 15:42:27
【问题描述】:

我正在尝试使用实体来匹配某些数据,而正则表达式似乎与 Python 中的其他类似引擎甚至像 regexr.com 这样的网站并不能很好地匹配。这里有一些例子:

模式:([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{3})

要匹配的字符串样式:83123e42-d9ad-a26a-b13f-b0ec91c7fedf-ABC

但是,当测试它时,它会得到:

@id:83123e42

@id:d9ad

@id:a26a

@id:b13f

@id:b0ec91c7fedf

@id:ABC

我尝试过对整个字符串进行分组,使用字符串分隔符,转义连字符,使用.{4}- 而不是 \w,但都没有可靠的结果,并且经常得到完全相同的匹配,它将它分成组而不是比一场完整的比赛。

这是一个正则表达式问题吗?我尝试不对整个字符串进行分组,但似乎一直遇到完全相同的问题,它甚至找不到最后 3 个字母。

如果 Watson Assistant 使用不同的正则表达式引擎,是否有我无法找到的文档?他们似乎只是假设任何正常的正则表达式都可以工作,但跳过连字符是奇怪的行为。

【问题讨论】:

  • 您的输入与- 分开。您应该查看有关如何使用字符串和正则表达式提取结果的相关文档。
  • @WiktorStribiżew 那么我应该逃避-s 吗?所以正则表达式应该是: ([\w]{8}\-[\w]{4}\-[\w]{4}\-[\w]{4}\-[\w]{12}\ -[\w]{3}) 这似乎也没有捕获整个组
  • 在字符类之外,您不应在任何正则表达式引擎中转义 -。只有在 Lua 模式中它必须转义。
  • 好的,那么我将如何正确捕获 hypens 以使实体返回为 @id:83123e42-d9ad-a26a-b13f-b0ec91c7fedf-ABC ?
  • 您的模式在WA 中对我来说可以正常工作@id.literal 返回完整匹配的ID,@id.groups 返回匹配的组 - 如果有定义的话。

标签: regex ibm-cloud ibm-watson watson-conversation


【解决方案1】:

最终从 Slack 频道的一位出色的助手那里找到了更直接的答案:

事实证明,Watson 助手 Regex 中的某些内容无法识别连字符。

他最终和我一起工作,并向我展示了一些我正在运行的 SpEL,以分配给我可以使用的上下文变量。

"<? input.text.extract('(\\w{8}\\-\\w{4}\\-\\w{4}\\-\\w{4}\\-\\w{12}\\-\\w{3}[^\\w]+)', 0) ?>"

【讨论】:

    【解决方案2】:

    引用Watson Assistant docs for defining entities,这里是相关部分:

    正则表达式引擎松散地基于 Java 正则 表达引擎。 Watson Assistant 服务将产生错误 如果您尝试通过 API 或 从 Watson Assistant 服务工具 UI 中。

    该部分包含一些有关限制和考虑事项的信息 在编写正则表达式时。最重要的引用是:

    实体模式可能不包含:
    - 积极的重复(例如x*+
    - 反向引用(例如 \g1
    - 条件分支(例如(?(cond)true)

    【讨论】:

    • 所以,我没有使用正向重复、反向引用或条件分支。从我读到的关于 Java 正则表达式引擎的内容来看,这种模式应该没问题。我看不到我在那种模式下所做的任何事情都无法识别完整的字符串。
    • WA 正则表达式不支持前瞻和后瞻。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2019-02-24
    • 2011-03-27
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多