我有一些字符串可能包含某些内容的缩写或全名,我想将它们全部替换为该单词的相同变体。
例如,
" 8演出", " 8千兆字节",和 " 8 gbs" 应该都变成了 " 8千兆字节"
最好的方法是什么?是否单独替换它们?
此外,我正在尝试为多个单词(即兆字节,太字节)执行此操作,每个单词需要不同的替换,还是有办法将它们全部放在一个中?
答案 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'