将字符串拆分为一个列表,保留重音字符和表情符号,但删除标点符号

2024-10-01 04:51:22 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有绳子:

"O João foi almoçar :) ." 

在python中,如何最好地将其拆分为单词列表,如下所示:

^{pr2}$

是吗?在

谢谢:)

索非亚


Tags: 列表单词arjo绳子pr2foialmo
2条回答
>>> import string
>>> [ i for i in s.split(' ') if i not in string.punctuation]
['O', 'João', 'foi', 'almoçar', ':)']

如果标点符号落在自己的空格分隔标记中,就像您的示例一样,那么很容易:

>>> filter(lambda s: s not in string.punctuation, "O João foi almoçar :) .".split())
['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)']

如果不是这样,您可以像这样定义一个笑脸词典(您需要添加更多):

^{pr2}$

然后用不包含标点符号的占位符替换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()

相关问题 更多 >