鉴于输入:
nguye64n tra62n huye62n my
期望的输出:
nguyễn trần huyền my
我一直在使用替换表并迭代每个字符来查找数字,缓存它们并在它后面跟着一个非数字字符时进行翻译:
substitute = {'e64': u'ễ', 'a62': u'ầ', 'e62': 'ề'}
s = 'nguye64n tra62n huye62n my'
tonal = ''
x = ''
for ch in s:
if ch.isdigit():
tonal += ch
else:
if tonal:
tonal = substitute[x[-1] + tonal]
x = x[:-1] + tonal
tonal = ''
x += ch
[OUT]:
>>> x
'nguyễn trần huyền my'
在替换表中是否有更简单的方法来实现相同的输出?可能是正则表达式替换或某些str.translate
操作?
答案 0 :(得分:2)
函数re.sub
可用于根据函数替换匹配。在这里,我使用了lambda函数来处理匹配并将其替换为查找表:
#coding:utf8
import re
substitute = {'e64': u'ễ', 'a62': u'ầ', 'e62': 'ề'}
s = 'nguye64n tra62n huye62n my'
x = re.sub(r'[a-z]\d+',lambda m: substitute[m.group(0)],s)
print(x)
nguyễntrầnhuyềnmy