2017-06-27 4 views
1

入力を考える:私は代替テーブルでそれをやって探すために各文字を反復してきたテーブルから単一のUnicodeの英数字ストリングを代入

nguyễn trần huyền my 

nguye64n tra62n huye62n 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 

[アウト]:

>>> x 
'nguyễn trần huyền my' 

は、置換テーブル与えられた同じ出力を達成するための簡単な方法はありますか?正規表現の置換またはstr.translateの操作ですか?

答えて

2

関数re.subを使用して、関数に従って一致を置き換えることができます。ここで私は試合を処理し、ルックアップテーブルからそれを置き換えるためにラムダ関数を使用しました:

#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) 

グエン・トランhuyền私

+0

あなたは 'substitute.get(m.groupを[使用している場合'substitute [m.group(0)]の代わりに' '' 'KeyError''を返さないで、元のテキストを返します。これは欲しい行動かもしれないし、そうでないかもしれない –

関連する問題