删除最后一个标点字符

时间:2018-06-15 11:51:00

标签: python string python-3.x text punctuation

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

我有一个这样的字符串:

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)'中,感叹号已删除,但括号需要保留。关于如何做到这一点的任何线索??

提前谢谢大家

编辑:

“嘿”之后的逗号应该离开。我应该一次只删除一个标点符号,所以如果我在一个单词的末尾找到2,那么只有一个被删除。

2 个答案:

答案 0 :(得分:1)

如何检查任何可能的标点符号 找到一个被剥离的字符串?

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循环。

答案 1 :(得分:1)

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

这是一个例子:

import re

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