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)
丹尼尔有一个不错的解决方案,但如果示例字符串没有空格分隔,它就不起作用。例如,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)
这将解决问题,它是 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"}
希望这对您有帮助。