删除标点符号并返回一个有意义的句子 - Python

时间:2016-04-26 23:58:02

标签: python

我使用以下代码从句子中删除标点符号:

   import string
   translator = str.maketrans({key: None for key in string.punctuation})

   s = "I am,a boy"
   print(s.translate(translator))

但是,例如,s ="我是,男孩",输出是"我是男孩",我希望输出是"我是个男孩" (空格b / n" am"&" a")。但如果最初有一个空间,就像在s ="我是,一个男孩",我希望输出是"我是一个男孩"即只是删除标点符号。

1 个答案:

答案 0 :(得分:4)

最直接的方法是用空格替换所有标点符号,然后通过拆分和重新连接字符串,用空格替换所有空白空格。 (虽然Tadhg指出,这也取代了换行符。)

import string
translator = str.maketrans({key: " " for key in string.punctuation})

s = "I am,a boy"

print(" ".join(s.translate(translator).split()))

也可以使用正则表达式完成工作:

import re, string
# need to escape a couple of characters to build a valid regex
regex = " *[%s]+ *" % string.punctuation.replace("\\", "\\\\").replace("]", "\\]")

s = "I am,a boy"
print(re.sub(regex, " ", s))

现在,这个正则表达式并没有解决在字符串的开头或结尾找到的标点符号,它将被转换为单个空格。处理此问题的最简单方法可能是:

print(re.sub(regex, " ", s).strip())