我知道这个问题很容易被标记为重复,但在网站上搜索后我找不到任何与我真正想做的事情相符的事情。
我有一个这样的字符串:
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,那么只有一个被删除。答案 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'