Python 用表中的单个unicode替换字母数字子字符串
根据输入:Python 用表中的单个unicode替换字母数字子字符串,python,regex,string,unicode,substitution,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()
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
操作?函数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)
恩圭ễn trần休伊ề我的
如果您使用
substitute.get(m.group[0],m.group[0])
而不是substitute[m.group(0)]
当dict中没有匹配项时,您将不会得到keyror
,它将返回原始文本。这可能是,也可能不是我们想要的行为