我试图编写一个函数process(s,d),用字典将字符串中的缩写替换为它们的全部含义。其中s是字符串输入,d是字典。例如:
>>>d = {'ASAP':'as soon as possible'}
>>>s = "I will do this ASAP. Regards, X"
>>>process(s,d)
>>>"I will do this as soon as possible. Regards, X"
我尝试使用split函数来分隔字符串,并将每个部分与字典进行比较。在
^{pr2}$但是,它返回的是相同的字符串。我怀疑代码不能正常工作是因为原始字符串中ASAP后面的句号。如果是这样的话,我怎么能忽略标点符号并尽快被替换?在
你可以这样做:
以下是使用单个正则表达式执行此操作的方法:
与基于
str.replace()
的版本不同,它遵循单词边界,因此不会替换出现在其他单词中间的缩写(例如“fetch”中的“etc”)。在而且,不像大多数人(全部?)到目前为止提出的其他解决方案是,它只在输入字符串上迭代一次,而不管字典中有多少个搜索词。在
这里有一个可行的解决方案:使用re.split(),并按单词边界分割(保留间隙字符):
这个代码与Vaughn或Sheena的答案有一个显著的区别,那就是这段代码利用了字典的O(1)查找时间,而他们的解决方案会查看字典中的每个键。这意味着当},它们的解将错误地产生{}。在
s
很短,d
非常大时,它们的代码将需要更长的时间来运行。此外,部分单词在它们的解中仍然会被替换:如果d = { "lol": "laugh out loud" }
和{相关问题 更多 >
编程相关推荐