Python 如何折叠连续分隔符?
Python中的默认Python 如何折叠连续分隔符?,python,string,split,Python,String,Split,Python中的默认split方法将连续空格视为单个分隔符。但如果指定分隔符字符串,则连续分隔符不会折叠: >>> 'aaa'.split('a') ['', '', '', ''] 折叠连续分隔符最直接的方法是什么?我知道我可以从结果列表中删除空字符串: >>> result = 'aaa'.split('a') >>> result ['', '', '', ''] >>> result = [item for ite
split
方法将连续空格视为单个分隔符。但如果指定分隔符字符串,则连续分隔符不会折叠:
>>> 'aaa'.split('a')
['', '', '', '']
折叠连续分隔符最直接的方法是什么?我知道我可以从结果列表中删除空字符串:
>>> result = 'aaa'.split('a')
>>> result
['', '', '', '']
>>> result = [item for item in result if item]
但是还有更方便的方法吗?您可以使用正则表达式:
re.split(pattern, string[, maxsplit=0, flags=0])
string = 'aaa'
result = re.split('a+', string)
作为
可以与正则表达式一起使用作为分隔符,如中所示:
re.split(pattern, string[, maxsplit=0, flags=0])
不,没有比这更方便的方法了。要么编写自己的拆分函数,要么删除空字符串
但是,您的解决方案看起来非常清晰和通俗。尽管它并不完全符合您的要求,但您可以通过使用
集合来消除所有非唯一令牌:
>>> result
['', '', '']
>>> set(result)
set([''])
这是你能得到的最简洁的信息:
string = 'aaa'
result = [s for s in string.split('a') if s]
或者您可以切换到正则表达式:
re.split(pattern, string[, maxsplit=0, flags=0])
string = 'aaa'
result = re.split('a+', string)
我认为你的解决方案完全可以。这里有一个等价的:
filter(bool, 'aaa'.split('a'))
不过,可能没有列表理解那么清晰。似乎可以通过re.split
实现这一点!我没有意识到没有参数的split()
所做的事情无法通过带有参数的split
进行复制,如果需要的话。很抱歉,这个解决方案非常糟糕。另外,过滤器在python3中发生了更改,并且不会产生相同的结果。您可以详细说明为什么它不好(除了我不知道它在python3中的行为发生了更改之外)?因为您正在向bool(开销)添加函数调用,使其可读性降低。filter
在python3中返回一个迭代器(与列表相反)―它使用的内存更少。@Franklin我明确地提到,它的可读性可能不如列表理解,但我看到了关于开销的要点。谢谢你指出这一点。很好的解决方案!模式a+
将尽可能被最连续的a
分割。因此,通过运行re.split('a+',string)
它将返回['',]
。假设string='baaac'
那么它将返回['b','c']
。我将它再放入一个中以去除任何人工制品:s=[s2 for s2 in[s.strip()for s in linkObj.getText().split('')if s]if s2]