我正在尝试使用实体来对某些数据进行匹配,而正则表达式似乎与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,但是都没有得到可靠的结果,并且经常得到完全相同的匹配,将其拆分为组而不是一场完整比赛。
这是正则表达式问题吗?我尝试不对整个字符串进行分组,但是似乎一直遇到完全相同的问题,无论如何它甚至都找不到最后三个字母。
如果Watson Assistant使用其他正则表达式引擎,那么有没有我找不到的文档所在的地方?他们似乎只是假设任何正常的正则表达式都可以使用,但是跳过连字符是一种奇怪的行为。
答案 0 :(得分:1)
最终从Slack频道的一位出色助手那里找到了更直接的答案:
事实证明Watson助手Regex中的某些内容无法识别连字符。
他最终与我一起工作,并向我展示了一些SpEL,我已将它们分配给可以使用的上下文变量。
"<? input.text.extract('(\\w{8}\\-\\w{4}\\-\\w{4}\\-\\w{4}\\-\\w{12}\\-\\w{3}[^\\w]+)', 0) ?>"
答案 1 :(得分:0)
引用Watson Assistant docs for defining entities,这里是相关部分:
正则表达式引擎宽松地基于Java正则表达式 表达引擎。 Watson Assistant服务将产生错误 如果您尝试通过API或 从Watson Assistant服务Tooling UI中。
该部分包含有关限制以及应考虑的内容的一些信息 编写正则表达式时。被引用的最重要的是:
实体模式可能不包含:
-正重复(例如x*+
)
-反向引用(例如\g1
)
-条件分支(例如(?(cond)true)
)