Power Query 检查字符串是否包含列表中的字符串

Alw*_*ing 5 contains list m powerquery

有没有办法检查文本字段以查看它是否包含列表中的任何字符串?

要检查的示例字符串:

The raisin is green
The pear is red
The apple is yellow
Run Code Online (Sandbox Code Playgroud)

列出要验证的示例

red
blue
green
Run Code Online (Sandbox Code Playgroud)

结果将是

任何一个:

green
red
null
Run Code Online (Sandbox Code Playgroud)

或者:

TRUE
TRUE
FALSE
Run Code Online (Sandbox Code Playgroud)

Ale*_*son 6

丹尼尔有一个不错的解决方案,但如果示例字符串没有空格分隔,它就不起作用。例如,The brick is reddish将检测red为子字符串。

您可以使用以下公式创建自定义列:

(C) => List.AnyTrue(List.Transform(Words, each Text.Contains(C[Texts], _)))
Run Code Online (Sandbox Code Playgroud)

这将获取列表Words = {"red","blue","green"}并检查列表中的每种颜色是否包含在[Texts]该行的列中。如果有,则返回TRUEother FALSE

整个查询如下所示:

let
    TextList = {"The raisin is green","The pear is red","The apple is yellow"},
    Texts = Table.FromList(TextList, Splitter.SplitByNothing(), {"Texts"}, null, ExtraValues.Error),
    Words = {"red","blue","green"},
    #"Added Custom" = Table.AddColumn(Texts, "Check", (C) => List.AnyTrue(List.Transform(Words, each Text.Contains(C[Texts], _))))
in
    #"Added Custom"
Run Code Online (Sandbox Code Playgroud)


Dan*_*rce 0

这将解决问题,它是 PowerQuery(“M”)代码:

let
    Texts = {"The raisin is green","The pear is red","The apple is yellow"},
    Words = {"red","blue","green"},
    TextsLists = List.Transform(Texts, each Text.Split(_," ")),
    Output = List.Transform(TextsLists, each List.Count(List.Intersect({_,Words}))>0)
in
    Output
Run Code Online (Sandbox Code Playgroud)

有两个列表:句子(文本)和要检查的单词(单词)。要做的第一件事是转换单词列表中的句子,使用“”作为分隔符分割字符串。

TextsLists = List.Transform(Texts, each Text.Split(_," ")),
Run Code Online (Sandbox Code Playgroud)

然后,您将新列表与单词列表“交叉”。结果是出现在两个列表(TextList 和 Words)中的元素(字符串)列表。现在您计算这些新列表并检查结果是否大于 cero。

Output = List.Transform(TextsLists, each List.Count(List.Intersect({_,Words}))>0)
Run Code Online (Sandbox Code Playgroud)

输出是一个新列表 {True, True, False)。

或者,您可以通过以下方式更改输出行:

Output = List.Transform(TextsLists, each List.Intersect({_,Words}){0}?)
Run Code Online (Sandbox Code Playgroud)

这将返回第一个重合的列表,如果没有重合,则返回 null。在示例中:{"green", "red", "null"}

希望这对您有帮助。