用字典替换字符串,标点符号的复杂性

2023-12-02

我正在尝试编写一个函数 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 函数来分隔字符串并将每个部分与字典进行比较。

def process(s):
    return ''.join(d[ch] if ch in d else ch for ch in s)

但是,它返回给我完全相同的字符串。我怀疑代码不起作用,因为原始字符串中的 ASAP 后面有句号。如果是这样,我如何忽略标点符号并尽快更换?


这是使用单个正则表达式来完成此操作的方法:

In [24]: d = {'ASAP':'as soon as possible', 'AFAIK': 'as far as I know'}

In [25]: s = 'I will do this ASAP, AFAIK.  Regards, X'

In [26]: re.sub(r'\b' + '|'.join(d.keys()) + r'\b', lambda m: d[m.group(0)], s)
Out[26]: 'I will do this as soon as possible, as far as I know.  Regards, X'

与基于的版本不同str.replace(),这会观察单词边界,因此不会替换恰好出现在其他单词中间的缩写(例如“fetch”中的“etc”)。

此外,与迄今为止提出的大多数(所有?)其他解决方案不同,它只迭代输入字符串一次,无论字典中有多少搜索词。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用字典替换字符串,标点符号的复杂性 的相关文章

随机推荐