用表中的单个unicode替换字母数字子串

时间:2017-06-27 02:37:37

标签: python regex string unicode substitution

鉴于输入:

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操作?

1 个答案:

答案 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