无法让 Logic App Contains 使用数组或逗号分隔的字符串

Can't get Logic App Contains to work with array or comma separated string

我正在尝试从 for each 循环中查找文本内的特定关键字。

var text = "The lazy fox jumped over the brown dog."
var keywords = "fox,dog,sun";

如果为真,我想对文本做点什么。如果为假,我想忽略文本。

有谁知道如何使用数组过滤器、函数、Select、条件或内联代码来检查这个?如果是这样,具体的例子就太好了。

顺便说一下,我有一个 C# 函数可以在 ASP.net 核心应用程序中非常好地处理这个问题。

更新 1:

这行不通。

更新 2:

即使将设置和并行度更改为 1,for each 循环后条件始终为假。

提前致谢!

解决方法之一是使用 Condition 连接器。我已经在字符串中初始化了句子,然后使用了条件连接器来检查条件。

最后,在真正的部分中,您可以相应地添加连接器。

有很多方法可以满足您的需求。这是我在一分钟内想到的 3 个选项。

  1. 第一个确实使用了 For each 循环,但我不建议使用它,因为它不是很有效。

For each 参数如下所示:

Condition 参数如下所示:

  1. 第二个选项更简单 - 不需要循环,直接过滤数组,然后你可以检查它是空的还是有一些项目:

Filter array 参数如下所示。

split 函数与选项 1 中使用的函数相同。

  1. 如果您知道 JavaScript,您可能会决定在内联代码中使用正则表达式,例如:

然后你只需要检查内联代码的输出。 JavaScript 上面例子中使用的代码:

var text = workflowContext.actions.Compose_text.outputs;
var keywords = workflowContext.actions.Compose_keywords.outputs;
return text.match(new RegExp("(" + keywords.split(",").join("|") + ")", "gi"));

我个人的偏好是选项 2。但是,请注意上面的所有 3 个选项都会在文本“The weather was sunny”中找到“sun”,即使文本中没有单词“sun”。如果您确实需要“sun”来匹配单词“sun”——而不是“sunny”、“asunder”或“unsung”——那么选择选项 3,只需使用不同的、更复杂的正则表达式。

在 for each 循环后面放置一个 Compose 并在条件中引用输出是最终对我有用的方法。我在 Compose 中使用了 toLower() 函数。撰写看起来像这样。

toLower(items('For_each_2')?['day']?['longPhrase'])