Watson Assistant 使用什么来检查正则表达式?

What does Watson Assistant use to check regex?

我正在尝试使用实体来匹配某些数据,但正则表达式似乎与 Python 中的其他类似引擎甚至 [=44= 这样的网站都不太匹配].这里有一些例子:

模式:([\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 使用不同的正则表达式引擎,是否有我找不到的文档?他们似乎只是假设任何正常的正则表达式都可以工作,但跳过连字符是奇怪的行为。

引用Watson Assistant docs for defining entities,此处相关部分:

The regular expression engine is loosely based on the Java regular expression engine. The Watson Assistant service will produce an error if you try to upload an unsupported pattern, either via the API or from within the Watson Assistant service Tooling UI.

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

Entity patterns may not contain:
- Positive repetitions (for example x*+)
- Backreferences (for example \g1)
- Conditional branches (for example (?(cond)true))

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

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

他最终与我一起工作并向我展示了一些 SpEL,我已将其 运行 分配给一个上下文变量,然后我可以使用它。

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