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

3

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

例如:

"8 gigs"、"8 gigabytes"和"8 gbs"应该都改成"8 gigabytes"。

最好的做法是什么呢?每个字符串分别替换吗?

此外,我想对多个单词执行此操作(即兆字节、千兆字节),这些单词每个都需要不同的替换吗?还是有方法将它们全部放在一个替换里?

2个回答

6

一个简单的re.sub可以为您解决问题。

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

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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接