我使用以下代码从句子中删除标点符号:
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 ="我是,一个男孩",我希望输出是"我是一个男孩"即只是删除标点符号。
答案 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())