如果我有字符串:
"O João foi almoçar :) ."
我如何最好将它分成python中的单词列表,如下所示:
['O','João', 'foi', 'almoçar', ':)']
谢谢:)
索菲亚
答案 0 :(得分:7)
如果标点符号与您的示例一样落入其自己的空格分隔标记中,那么很容易:
>>> filter(lambda s: s not in string.punctuation, "O João foi almoçar :) .".split())
['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)']
如果不是这种情况,你可以像这样定义一个表情词典(你需要添加更多):
d = { ':)': '<HAPPY_SMILEY>', ':(': '<SAD_SMILEY>'}
然后用不包含标点符号的占位符替换笑脸的每个实例(我们会认为<>
不是标点符号):
for smiley, placeholder in d.iteritems():
s = s.replace(smiley, placeholder)
将我们带到"O João foi almoçar <HAPPY_SMILEY> ."
。
然后我们删除标点符号:
s = ''.join(filter(lambda c: c not in '.,!', list(s)))
这给了我们"O João foi almoçar <HAPPY_SMILEY>"
。
我们确实还原了笑脸:
for smiley, placeholder in d.iteritems():
s = s.replace(placeholder, smiley)
然后我们拆分:
s = s.split()
向我们提供最终结果:['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)']
。
将所有内容整合到一个函数中:
def split_special(s):
d = { ':)': '<HAPPY_SMILEY>', ':(': '<SAD_SMILEY>'}
for smiley, placeholder in d.iteritems():
s = s.replace(smiley, placeholder)
s = ''.join(filter(lambda c: c not in '.,!', list(s)))
for smiley, placeholder in d.iteritems():
s = s.replace(placeholder, smiley)
return s.split()
答案 1 :(得分:-1)
>>> import string
>>> [ i for i in s.split(' ') if i not in string.punctuation]
['O', 'João', 'foi', 'almoçar', ':)']