小勤:上次试了《要删的内容很复杂,列举不完,那能不能想要啥就提取啥?》文章中的方法,但发现里面的List.Select函数的判断都是针对连续的字符的,所以用了each _>”A”and _<”z”的判断条件,问题是,有时候要保留的内容可能不是这种连续的,比如保留英文和横杠(-)等等:
大海:其实这也很简单,你可以在条件里加上or语句对零散的内容进行判断,比如这样:
=Text.Combine(
List.Select(
Text.ToList([公司]),
each_>="A" and _<="z" or _="-"
)
)
小勤:这个能想到,但有没有更加结构化的写法?比如给了一个需要保留的列表,甚至可能是动态的,然后判断每个元素是不是属于要保留的列表中的元素?
大海:嗯,其实你能想到这个就可以去查阅函数帮助了,其中有个函数叫List.Contains。在这里写法如下,公式:
=Text.Combine(
List.Select(
Text.ToList([公司]),
each List.Contains(
{"A".."z","-"},
_
)
)
)
函数List.Contains,判断列表中是否包含某元素,也就是某个元素是否在列表中。用法:
- List.Contains(列表,值)
参数:
- 列表:需要判断的列表
- 值:用于判断列表中是否包含的元素
小栗子:
- List.Contains({1,3,5},3)
- 结果:True
小勤:这个函数好,以后甚至可以通过动态参数的方式将需要保留的内容传递进去,然后就可实现动态数据保留了。
大海:对的,虽然这样写起来又得套多一层函数,但思路非常清晰,而且一旦参数化,灵活性就更强。
小勤:嗯。