Python的字符串split或re.split方法产生空字符的解决方法

目录

一、Split方法产生空字符

二、re.split方法产生空字符

三、解决方法

(1)用生成式进行过滤

(2)用filter函数进行过滤

四、总结


一、Split方法产生空字符

字符串的拆分可以用split方法,但是当字符串中出现多个连续的分隔符的时候,spilt方法产生的列表中会有很多空字符元素,这些空字符通常是我们不想要的。例如:

>>> a="AA,,,BB,CC,,,DD"
>>> a.split(',')  #用,来进行分隔,由于连续的分隔符会产生空字符
['AA', '', '', 'BB', 'CC', '', '', 'DD']

二、re.split方法产生空字符

如果不想要这些空字符,我们可以用re.split方法来进行分割,因为re.split支持正则表达式的分隔符,我们可以将分隔符','换成',+'即可,例如:

>>> import re
>>> a="AA,,,BB,CC,,,DD"
>>> re.split(',',a)  #用,进行分割和字符串split结果一样有空字符
['AA', '', '', 'BB', 'CC', '', '', 'DD']
>>> re.split(',+',a) #用‘,+’进行分割空字符消失
['AA', 'BB', 'CC', 'DD']

虽然re.split方法很强大,但是还是会有一些情况该方法也会产生空字符。例如有多个分隔符且多个分隔符连续在一起,此时re.split也会产生空字符。例如:

>>> a="AA,,=BB==,,CC=DD" 
>>> re.split(",+|=+",a) #用,或=进行分割,产生空字符
['AA', '', 'BB', '', 'CC', 'DD']
>>> re.split("[,=]",a) #用方括号的,或=进行分割,也产生空字符
['AA', '', '', 'BB', '', '', '', 'CC', 'DD']
>>> re.split("[,+=+]",a) #另一种方式进行分割,也产生空字符
['AA', '', '', 'BB', '', '', '', 'CC', 'DD']

出现这种情况我们可以在产生的列表进行过滤,将空字符过滤掉,下面介绍几种方法

三、解决方法

(1)用生成式进行过滤

生成式可以进行结果筛选,去除空字符,例如

>>> import re
>>> a="AA,,=BB==,,CC=DD" 
>>> re.split(",+|=+",a) #直接分割会产生空字符
['AA', '', 'BB', '', 'CC', 'DD']
>>> [x for x in re.split(",+|=+",a) if x] #用生成式进行过滤,去除空字符
['AA', 'BB', 'CC', 'DD']

(2)用filter函数进行过滤

我们也可以用filter函数进行过滤,可以将filter函数的func用None代表,既可以过滤空字符,例如

>>> import re
>>> a="AA,,=BB==,,CC=DD" 
>>> re.split(",+|=+",a) #直接分割产生控制符
['AA', '', 'BB', '', 'CC', 'DD']
>>> list(filter(None,re.split(",+|=+",a))) #用filter函数过滤空字符
['AA', 'BB', 'CC', 'DD']

需要注意的是filter函数返回的是filter object对象,需要用list函数转换成列表。

四、总结

本文介绍了字符串拆分产生空字符元素的解决方法,当然此类方法是非常多的,文中的方法只是本人的一些经验,如果读者有更多方法欢迎评论区帮忙补充,谢谢!

你可能感兴趣的:(Python学习,python)