用字典修复长度re.sub

时间:2013-09-29 00:16:57

标签: python regex dictionary

我有一个包含三个字母长的所有键的字典:threeLetterDict={'abc': 'foo', 'def': 'bar', 'ghi': 'ha' ...}

现在我需要将句子abcdefghi翻译成foobarha。我正在使用re.sub尝试下面的方法,但不知道如何将字典放入其中:

p = re.compile('.{3}') # match every three letters
re.sub(p,'how to put dictionary here?', "abcdefghi")

谢谢! (无需检查输入长度是否为三的倍数)

3 个答案:

答案 0 :(得分:3)

您可以将任何可调用对象传递给re.sub,所以:

p.sub(lambda m: threeLetterDict[m.group(0)], "abcdefghi")

It works!

答案 1 :(得分:3)

完全避免re的解决方案:

threeLetterDict={'abc': 'foo', 'def': 'bar', 'ghi': 'ha'}

threes = map("".join, zip(*[iter('abcdefghi')]*3))

"".join(threeLetterDict[three] for three in threes)
#>>> 'foobarha'

答案 2 :(得分:2)

您可能不需要在这里使用sub:

>>> p = re.compile('.{3}')
>>> ''.join([threeLetterDict.get(i, i) for i in p.findall('abcdefghi')])
'foobarha'

只是另一种解决方案:)。