如何在python中用一个单词替换多个单词?

时间:2015-06-24 19:24:07

标签: python string replace

我有一些字符串可能包含某些内容的缩写或全名,我想将它们全部替换为该单词的相同变体。

例如,

" 8演出", " 8千兆字节",和 " 8 gbs" 应该都变成了 " 8千兆字节"

最好的方法是什么?是否单独替换它们?

此外,我正在尝试为多个单词(即兆字节,太字节)执行此操作,每个单词需要不同的替换,还是有办法将它们全部放在一个中?

2 个答案:

答案 0 :(得分:3)

一个简单的re.sub可以帮到你。

>>> import re
>>> s = 'gigabytes, foo gigs; foo gbs'
>>> re.sub('(gigabytes|gigs|gbs)','gigabytes',s)
'gigabytes, foo gigabytes; foo gigabytes'

答案 1 :(得分:2)

>>> import re
>>> re.sub(r'(\d+) (gigs|gigabytes|gbs)', r'\1 gigabytes', str)

对于多个替换,诀窍是使用可调用的(在本例中为lambda函数)作为替换:

>>> gb='gigabytes'
>>> mb='megabytes'
>>> subs={'gigs': gb, 'gigabytes': gb, 'gbs': gb, 'mbs': mb, ...}
>>> str='there are 2048 mbs in 2 gigs'
>>> re.sub(r'(\d+) ({})'.format('|'.join(subs.keys())), \
        lambda x: '{} {}'.format(x.group(1), subs[x.group(2)]), str)
'there are 2048 megabytes in 2 gigabytes'