加入有如下字符串需要进行分割:
s = "abc,,,fefdaf,,,123fad,,fsdfa,,,"
使用str类的split函数,得到如下结果:
会出现很多 空字符串,有时候肯定是不希望结果也包含此种内容的。那该怎么把这些空的字符串删除掉?
一.列表推导式
使用列表推导式,加个判断即可,简写如下:
[x for x in s.split(',') if x]
结果如图:
没有空格了,完美解决。
二.使用filter高阶函数
和上面的区别不大,代码简写如下:
list(filter(None,s.split(',')))
结果如图:
可以看到,与上面的列表推导式的结果一致。
三.使用正则表达式
仔细观察后,可以发现,有用的字符串包含了[0-9]、[a-z]之间的字符,根据这个特征,可以直接进行提取:
import re
re.findall('[a-z0-9]+',s)
结果如图:
这种方式最为灵活多变,可以处理很多情况,也是我最喜欢用的。
当然,也可以用字符替换的方式,这里使用str类的maketrans方法进行转换:
table = str.maketrans(',',' ')
s.translate(table).split()
结果如图:
当然,还可以进行引申,例如有如下字符串:
s = "This is a (test) !"
希望可以获取()里面的分割,代码如下:
table = str.maketrans('()',' ')
s.translate(table).split()
结果如图:
关于 maketrans方法的使用,可以自行谷歌,在此不做延伸,感谢阅读。
AD: