在Python中分词并保留分隔符

17 投票
5 回答
19628 浏览
提问于 2025-04-15 16:32

在Python中,有没有类似于str.split的功能,可以同时返回分隔符呢?

我需要在处理一些字符串后,保留空格的布局,以便我的输出看起来和原来一样。

举个例子:

>>> s="\tthis is an  example"
>>> print s.split()
['this', 'is', 'an', 'example']

>>> print what_I_want(s)
['\t', 'this', ' ', 'is', ' ', 'an', '  ', 'example']

谢谢!

5 个回答

4

这个 re 模块提供了这样的功能:

>>> import re
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']

(摘自Python文档)

对于你的例子(按空白字符分割),可以使用 re.split('(\s+)', '\tThis is an example')

关键是把你想要分割的正则表达式放在括号里。这样,分隔符也会被加入到结果列表中。

补充说明:正如所提到的,任何前面的或后面的分隔符当然也会被加入到列表中。为了避免这种情况,你可以先对输入字符串使用 .strip() 方法。

6

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成程序可以使用的格式。

比如说,如果你从一个网页上获取了一些信息,这些信息可能是以文本的形式存在的。为了让程序能够处理这些文本,我们需要把它们转化成程序能理解的结构,比如列表或者字典。这样,程序才能更方便地使用这些数据。

在这个过程中,我们可能会用到一些工具或者库,这些工具可以帮助我们更轻松地进行数据转换和处理。总之,数据的处理和转换是编程中非常重要的一部分,掌握这些技能可以让你的程序更加智能和高效。

>>> re.compile(r'(\s+)').split("\tthis is an  example")
['', '\t', 'this', ' ', 'is', ' ', 'an', '  ', 'example']
19

那这样怎么样

import re
splitter = re.compile(r'(\s+|\S+)')
splitter.findall(s)

撰写回答