删除最后一个标点符号

removing the last punctuation character

我知道这个问题很容易被标记为重复,但在网站上搜索后我没有找到任何符合我真正想做的事情。

我有这样的字符串:

string = "hey, that's you(this is a test)!"

我正在开发一个函数,它只删除任何字符串中的最后一个标点符号,而不是嵌入在单词中的标点符号,也不是前导标点符号,该函数还应该将单词频率存储在字典中。

到目前为止这是我的代码:

def word_counts(string):
    s = string.lower().split()
    dic = {}

    for key in string:
        key = "".join([l for l in key if l.isalpha()])

        if key in dic :
            dic[key] += 1

        else:
            dic[key] = 1


    return dic

我的代码输出以下结果:

{'a': 1, 'hey': 1, 'is': 1, 'test': 1, 'thats': 1, 'youthis': 1}

但我需要的是:

{'a': 1, 'hey': 1, 'is': 1, 'test)': 1, 'that's': 1, 'you': 1, (this': 1}

请注意,在单词 'test)' 中,感叹号已被删除,但括号需要保留。有关如何执行此操作的任何线索??

提前谢谢大家

编辑:

"hey" 后面的逗号应该去掉。我应该一次只删除一个标点符号,所以如果我在一个单词的末尾找到 2 个,则只删除一个。

检查任何可能的标点符号怎么样 并在找到一个时返回一个剥离的字符串?

import string

def strip_last_punctuation(s):
    if s and s[-1] in string.punctuation:
        return s[:-1]
    else:
        return s

test_str = "hey, that's you(this is a test)!"
print(strip_last_punctuation(test_str))

编辑:删除了不必要的 for 循环。

以前的答案似乎不错,无论如何我会建议考虑正则表达式的方法。 只需检查,对于每个单词,是否存在标点符号,如果是,请将其删除。

举个例子:

import re

t = 'test.'
punctuations = '[!,\.:;"\']'
m = re.search( punctuations, t )
t.replace( m.group(0), '')
#out: 'test'