python用逗号和空格分割字符串

时间:2017-06-27 16:24:37

标签: python regex

我需要用逗号和空格分割字符串。所需行为的一个示例是将字符串' 5, 3, , hello'转换为列表['5', '3', 'hello']。这就是我的尝试:

import re
re.split(',|\s+', '    5,    3,   , hello')
['', '5', '', '3', '', '', '', 'hello']

为什么要返回空白条目?如何检索列表['5', '3', 'hello']

2 个答案:

答案 0 :(得分:4)

您可以使用findall并匹配您想要的内容:

>>> print re.findall(r'[^,\s]+', '    5,    3,   , hello')
['5', '3', 'hello']

[^,\s]+使用否定字符类来匹配任何不是逗号而不是空格的文本。

您的拆分正则表达式,|\s+在多个位置分割,因为,也被空格包围。

由于您的输入具有前导空格,即使在[,\s]+上拆分,也会在开头提供空元素。

>>> print re.split(r'[,\s]+', '    5,    3,   , hello')
['', '5', '3', 'hello']

答案 1 :(得分:3)

为了好玩,为了显示非正则表达式方法,您可以通过拆分,并忽略任何通过isspace检查并最终调用{{1}的字符串来理解这一点。放置在列表中的最终数据,以删除周围的空格。

考虑到这一点,最终解决方案如下:

strip

对两种解决方案进行时间分析,我们可以观察到以下内容:

>>> s = '    5,    3,   , hello'
>>> res = [c.strip() for c in s.split(',') if not c.isspace()]
>>> res
['5', '3', 'hello']

我对这种非正则表达式理解方法有多大差异感到有些惊讶。