如何使用List.ContainsAny实现与Text.Contains一致的排除词匹配效果
你简化代码逻辑不符的核心问题是对List.ContainsAny函数的作用理解有误:
List.ContainsAny的逻辑是判断第一个输入列表中是否存在任意元素,完全匹配第二个输入列表中的任意元素- 你传入的第一个参数是
{[ColumnName]},相当于仅判断整段文本是否完全等于"pie"或"cake",和你原代码中「判断文本是否包含pie/cake」的逻辑完全不同
你可以通过List.Transform+List.AllTrue的组合实现逻辑完全等价的简化写法,后续新增排除关键词只需修改排除关键词列表即可,无需重复编写判断语句:
if Text.Contains([ColumnName], "apple", Comparer.OrdinalIgnoreCase) and List.AllTrue(List.Transform({"pie", "cake"}, (excludeKeyword) => not Text.Contains([ColumnName], excludeKeyword, Comparer.OrdinalIgnoreCase))) then "Apple" else "Null"
如果更习惯原代码的否定前置写法,也可以用List.AnyTrue实现:
if Text.Contains([ColumnName], "apple", Comparer.OrdinalIgnoreCase) and not List.AnyTrue(List.Transform({"pie", "cake"}, (excludeKeyword) => Text.Contains([ColumnName], excludeKeyword, Comparer.OrdinalIgnoreCase))) then "Apple" else "Null"
内容的提问来源于stack exchange,提问作者Sporty
相关产品推荐
相关产品推荐

