我有一些python代码,分隔逗号,但不剥离空白:

>>> string = "blah, lots  ,  of ,  spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots  ', '  of ', '  spaces', ' here ']

我宁愿最后像这样删除空白:

['blah', 'lots', 'of', 'spaces', 'here']

我知道我可以循环遍历列表并strip()每个项,但由于这是Python,我猜有一种更快、更简单和更优雅的方式来完成它。


当前回答

import re
mylist = [x for x in re.compile('\s*[,|\s+]\s*').split(string)]

简单地说,逗号或至少一个空格,前面/后面没有空格。

请尝试!

其他回答

Re(在正则表达式中)允许同时对多个字符进行拆分:

$ string = "blah, lots  ,  of ,  spaces, here "
$ re.split(', ',string)
['blah', 'lots  ', ' of ', ' spaces', 'here ']

这对于示例字符串不太适用,但是对于逗号分隔的列表很适用。对于示例字符串,可以结合re.split功能对正则表达式模式进行拆分,以获得“按此或按此拆分”的效果。

$ re.split('[, ]',string)
['blah',
 '',
 'lots',
 '',
 '',
 '',
 '',
 'of',
 '',
 '',
 '',
 'spaces',
 '',
 'here',
 '']

不幸的是,这很难看,但过滤器可以做到:

$ filter(None, re.split('[, ]',string))
['blah', 'lots', 'of', 'spaces', 'here']

拖鞋!

我知道这个问题已经被回答了,但如果你经常这样做,正则表达式可能是一个更好的方法:

>>> import re
>>> re.sub(r'\s', '', string).split(',')
['blah', 'lots', 'of', 'spaces', 'here']

s匹配任何空白字符,我们只是用一个空字符串替换它。你可以在这里找到更多信息:http://docs.python.org/library/re.html#re.sub

import re
mylist = [x for x in re.compile('\s*[,|\s+]\s*').split(string)]

简单地说,逗号或至少一个空格,前面/后面没有空格。

请尝试!

在分割字符串之前,只需删除字符串中的空白。

mylist = my_string.replace(' ','').split(',')
s = 'bla, buu, jii'

sp = []
sp = s.split(',')
for st in sp:
    print st