Python split和re.split未捕获字符串中的制表符或空格

2 投票
3 回答
899 浏览
提问于 2025-04-18 03:49

我有一个字符串,内容是:

'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']
>>> 

撰写回答