我需要用逗号和空格分割字符串。所需行为的一个示例是将字符串' 5, 3, , hello'
转换为列表['5', '3', 'hello']
。这就是我的尝试:
import re
re.split(',|\s+', ' 5, 3, , hello')
['', '5', '', '3', '', '', '', 'hello']
为什么要返回空白条目?如何检索列表['5', '3', 'hello']
?
答案 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']
我对这种非正则表达式理解方法有多大差异感到有些惊讶。