我是编程的新手,我正在用Python编写一个小程序,以使用“字典”对句子中的单词进行缩写。我的想法是写出一个句子,任何包含为键的单词都将返回其缩写值。
我正在使用split()
方法来帮助完成此任务。问题是当我有一个部分与另一个相似的键时,例如,键“ account”将被打印为“ acct”,但是当我希望将另一个键“ account takeover”被打印为“ ato”时,它将不起作用。我假设split()现在对我不利。我浏览了字符串方法和字典方法,但无法提出解决方案。有任何想法吗?非常感谢您的帮助。
notes = input("Notes: ")
def simple_library(notes):
abbreviate = notes.lower().split(" ")
abbreviate_sentence = {
"account": "acct",
"account takeover": "ato"
}
output = ""
for words in abbreviate:
output += abbreviate_sentence.get(words, words) + " "
return output.upper()
print(simple_library(notes))
注意:帐户,帐户接管
帐户,接受合并
我希望它打印为 帐户,ATO
答案 0 :(得分:0)
如果您将输入分割成单词,这将不起作用。
您可以使用包含正则表达式的列表来代替字典,而这些正则表达式与要匹配的单词和短语以及它们的缩写匹配,并且对每个单词和单词都调用re.sub()
。
您应该订购此产品,以便更长的比赛排在第一位。否则,它将在尝试替换account
之前替换account takeover
。
您应该使用正则表达式而不是普通字符串,以便可以将单词边界与\b
匹配。否则,当它是另一个单词的一部分时,它可以缩写一个单词,例如将accounting
变成accting
。
因此代码如下:
import re
def simple_library(notes):
notes = notes.lower()
abbreviate_sentence = [
(r"\baccount\s+takeover\b", "ato"),
(r"\baccount\b", "acct")
]
for regexp, replace in abbreviate_sentence:
notes = re.sub(regexp, replace, notes)
return notes.upper()