是否可以检查文本字段以查看其是否包含列表中的任何字符串?
要检查的示例字符串:
The raisin is green
The pear is red
The apple is yellow
列出要验证的示例
red
blue
green
结果将是
任一:
green
red
null
或:
TRUE
TRUE
FALSE
答案 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”}
希望这对您有所帮助。