Python split和re.split未捕获字符串中的制表符或空格
我有一个字符串,内容是:
'Agendas / Schedules meetings and speakers 4 F 1928-1209 Box 2'
我想把这个字符串按照看起来像是制表符的地方分开。不过,当我用 print repr(str)
打印时,只能在最后看到一些特殊字符:
'Agendas / Schedules meetings and speakers 4 F 1928-1209 Box 2\r\n'
而且如果我尝试像 print re.split('\t+', str)
或 print re.split('\s+', str)
这样的代码,结果却没有分开,也就是说输出仍然是:
['Agendas / Schedules meetings and speakers 4 F 1928-1209 Box 2\r\n']
如果正则表达式不管用,有没有办法把这些固定宽度的项目分开呢?
更新:我希望只在较大的空白处进行分割,所以 .split()
这样把每个单词都变成列表元素的方法并不是我想要的。
3 个回答
1
字符串的split()方法默认会根据空格来分割内容。所以:
print str.split()
这样做就可以了。
4
我之前遇到过几次这种情况,你可能碰到了一个叫做零宽空格的东西。
>>> s = 'Agendas / Schedules meetings and speakers 4 F 1928-1209 Box 2'
>>> re.split(ur'[\u200b\s]+', s, flags=re.UNICODE)
['Agendas', '/', 'Schedules', 'meetings', 'and', 'speakers', '4', 'F', '1928-1209', 'Box', '2']
0
谢谢大家的反馈。我之前没注意到Python有一个关于零宽空格的bug(http://bugs.python.org/issue13391)
不过,看起来匹配多个空格就解决了这个问题:
>>>re.split('\s{2,}', s)
['Agendas / Schedules meetings and speakers', '4 F', '1928-1209', 'Box 2']
>>>