Powerbi 如何在一个字符串中搜索多个字符串?
我想在powerquery的新列中检查像Powerbi 如何在一个字符串中搜索多个字符串?,powerbi,powerquery,Powerbi,Powerquery,我想在powerquery的新列中检查像“这是一个测试字符串”这样的字符串是否包含任何字符串列表项{“dog”、“string”、“bark”} 我已经尝试了Text.PositionOfAny(“这是一个测试字符串”、{“dog”、“string”、“bark”}),但该函数只接受单字符值 Expression.Error: The value isn't a single-character string. 有什么解决办法吗 您可以在此处将正则表达式与逻辑OR-|表达式一起使用: /dog
“这是一个测试字符串”
这样的字符串是否包含任何字符串列表项{“dog”、“string”、“bark”}
我已经尝试了Text.PositionOfAny(“这是一个测试字符串”、{“dog”、“string”、“bark”})
,但该函数只接受单字符值
Expression.Error: The value isn't a single-character string.
有什么解决办法吗 您可以在此处将正则表达式与逻辑OR-
|
表达式一起使用:
/dog|string|bark/.test("This is a test string") // retruns true
如果它是一个特定的(静态)匹配列表,那么您需要在PQ中添加一个带有If-then-else语句的自定义列。然后在该列上使用筛选器保留或删除列。AFAIK PQ不支持正则表达式,因此Alexey的解决方案无法工作
如果您需要动态查找,它会变得更复杂。。。但实际上你需要这样做
在这种情况下,您需要将几个M组合在一起 您需要对列表多次使用
Text.Contains
,这是list.Transform
的好例子<代码>列表。AnyTrue将告诉您是否有匹配的字符串
List.AnyTrue(List.Transform({"dog","string","bark"}, (substring) => Text.Contains("This is a test string", substring)))
如果您希望有一个Text.ContainsAny
函数,您可以编写它
let
Text.ContainsAny = (string as text, list as list) as logical =>
List.AnyTrue(List.Transform(list, (substring) => Text.Contains(string, substring))),
Invoked = Text.ContainsAny("This is a test string", {"dog","string","bark"})
in
Invoked
另一个简单的解决方案是:
List.ContainsAny(Text.SplitAny("This is a test string", " "), {"dog","string","bark"})
它将文本转换为一个列表,因为在那里我们找到了一个可以满足您需要的函数。感谢您给我提供线索。在我自己的情况下,我需要确保字符串中存在两项,因此我将公式替换为:
List.AllTrue(List.Transform({"/","2017"},(substring) => Text.Contains("4/6/2017 13",substring)))
它完美地返回了真值。Power Query目前没有正则表达式支持,因此这并不能回答问题。感谢Carl,确切的解决方案有什么方法可以将此列表与切片器一起使用?即,测试字符串与所有字符串匹配(如示例中所示),但在切片器中选择“dog”时,只选择“dog”是否匹配?您是否碰巧有一个示例?将此作为一个动态过滤器,用户可以使用切片器/过滤器选择不同的单词,这将非常好。您应该接受前两个答案之一=)