如何在python中删除标点符号?

时间:2018-12-07 07:05:26

标签: python string punctuation

我有问题:

E.x。我有一句话

s = "AAA? BBB. CCC!" 

所以,我这样做:

import string
table = str.maketrans('', '', string.punctuation)
s = [w.translate(table) for w in s]

没关系。我的新句子将是:

s = "AAA BBB CCC"

但是,如果我输入的句子如下:

s = "AAA? BBB. CCC! DDD.EEE"

删除标点符号后,使用与下面相同的方法

s = "AAA BBB CCC DDDEEE"

但需要:

s = "AAA BBB CCC DDD EEE"

有什么想法/方法来解决这个问题吗?

7 个答案:

答案 0 :(得分:1)

尝试以下代码:

import re

input_str = "AAA? BBB. CCC! DDD.EEE"
output_str = re.sub('[^A-Za-z0-9]+', ' ', input_str)
print output_str
  

“ AAA BBB CCC DDD EEE”

答案 1 :(得分:1)

这是使用str.strip和简单迭代的一种方法。

例如:

from string import punctuation

s = "AAA? BBB. CCC! DDD.EEE"

def cleanString(strval):
    return "".join(" " if i in punctuation else i for i in strval.strip(punctuation))

s = " ".join(cleanString(i) for i in s.split())
print(s)

输出:

AAA BBB CCC DDD EEE

答案 2 :(得分:1)

string.punctuation包含以下字符:

'!“ ##%&\'()* +,-。/ :; <=>?@ [\] ^ _`{|}〜'

您可以使用translate和maketrans函数将标点符号映射为空值(替换)

import string

'AAA? BBB. CCC! DDD.EEE'.translate(str.maketrans('', '', string.punctuation))

输出:

'AAA BBB CCC DDDEEE'

答案 3 :(得分:0)

检查一下:

if __name__ == "__main__":
    test_string = "AAA? BBB. CCC! DDD.EEE"
    result = "".join((char if char.isalpha() else " ") for char in test_string)
    print(result)


Result: AAA  BBB  CCC  DDD EEE

答案 4 :(得分:0)

您也可以这样:

punctuation = "!@#$%^&*()_+<>?:.,;"  # add whatever you want

s = "AAA? BBB. CCC!" 
for c in s:
    if c in punctuation:
        s = s.replace(c, "")

print(s)

>>> "AAA BBB CCC"

答案 5 :(得分:0)

使用

" ".join(re.split('\W+', s))

将字符串拆分为所有非单词字符,然后将单个子字符串用单个空格连接。

答案 6 :(得分:0)

尝试一下:

import string
exclude = set(string.punctuation)
exclude.remove(".")
doc = "AAA? BBB. CCC! DDD.EEE"
for punctuation in exclude:
    doc = doc.replace(punctuation,"")
doc = doc.replace("."," ")
doc = doc.split()
print(" ".join(doc))