我有问题:
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"
有什么想法/方法来解决这个问题吗?
答案 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))