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

时间:2018-11-07 20:49:00

标签: list contains powerquery m

是否可以检查文本字段以查看其是否包含列表中的任何字符串?

要检查的示例字符串:

The raisin is green
The pear is red
The apple is yellow

列出要验证的示例

red
blue
green

结果将是

任一:

green
red
null

或:

TRUE
TRUE
FALSE

2 个答案:

答案 0 :(得分:1)

Daniel有一个不错的解决方案,但是如果示例字符串之间没有空格,它将无法正常工作。例如,The brick is reddish会将red检测为子字符串。

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

(C) => List.AnyTrue(List.Transform(Words, each Text.Contains(C[Texts], _)))

这将获取列表Words = {"red","blue","green"},并检查列表中的每种颜色是否包含在该行的[Texts]列中。如果有,则返回TRUE,否则返回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"

答案 1 :(得分: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

有两个列表:句子(文本)和要检查的词(单词)。首先要做的是使用“”作为定界符来转换单词列表中的句子,以拆分字符串。

TextsLists = List.Transform(Texts, each Text.Split(_," ")),

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

Output = List.Transform(TextsLists, each List.Count(List.Intersect({_,Words}))>0)

输出是一个新列表(“正确,正确,错误”)。

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

Output = List.Transform(TextsLists, each List.Intersect({_,Words}){0}?)

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

希望这对您有所帮助。