龙空技术网

Power Query中判断字符串中是否包含有字母的三种解决办法

EXCEL数据处理与分析 137

前言:

目前兄弟们对“javastring判断包含字符”可能比较关切,你们都需要分析一些“javastring判断包含字符”的相关资讯。那么小编也在网络上网罗了一些对于“javastring判断包含字符””的相关知识,希望兄弟们能喜欢,咱们一起来了解一下吧!

给出一个字符串列表,要求判断哪个字符串含有字母,哪个字符串不含字母:

使用Power Query来判断有两种基本方法:

一种使用List类函数来判断:List.PositionOfAny一种使用Text类函数来判断:Text.PositionOfAny

当然也可逆向思维,我们删除数字后判断长度,也是一种方法,同样这个思路用List类函数与Text类函数都有对应的函数支持:

List.RemoveMatchingItems、List.CountText.Remove、Text.LengthList.PositionOfAny

这是一个返回对应字符位置的函数,返回负数是没有找到对应的项目,否者就是有对应的项目。

当然要把字符串转换成列表,然后才能查找:

我们用Text.ToList函数把字符串转成列表

= Text.ToList(L1{0})

然后查找字母位置:

= List.PositionOfAny(TL,{"a".."z","A".."Z"})

{"a".."z","A".."Z"}包含了所有的大小写英文字母,“12a3b4”中字母的位置是2,这里返回的是第一个字母的位置,位置是从0开始的。

整个字符串的判断这样来做:

= List.Transform(L1,

(x)=>x&"-"&(if List.PositionOfAny(Text.ToList(x),{"a".."z","A".."Z"})>0 then "有字母" else "无字母"))

用一个循环过程来逐个字符串进行判断。

Text.PositionOfAny

这个函数要比用列表类函数简单些,不需要转换成列表,直接进行位置判断:

= Text.PositionOfAny(L1{1},{"a".."z","A".."Z"})

L1{1}="1234",返回的结果是-1就表名这个字符串中没有字母

我们把这个函数替换到循环中:

= List.Transform(L1,

(x)=>x&"-"&(if Text.PositionOfAny(x,{"a".."z","A".."Z"})>0 then "有字母" else "无字母"))

这个公式要比第一种方法简洁很多。

最后我们用Text.Remove、Text.Length写一个公式来看看能否实现这个功能:

= List.Transform(L1,

(x)=>x&"-"&(if Text.Length(Text.Remove(x,{"0".."9"}))=0 then "无字母" else "有字母"))

这个公式看起来比第二个公式要复杂一些,但是这个公式应该更有效率,查找52次字母和删除10个数字比起来,肯定删除数字更有效率。

同样的一个问题,不同的思路解决问题的效率也会稍有不同,这个效率问题在数据量较小的时候,并不明显,当数据量很大的时候,效率不高的公式,就会拖慢整体的运行速度。

标签: #javastring判断包含字符