1
期望的任務是將v
替換爲u
變音符對應項。str.maketrans或re.sub用於Python3中的unicode
我能做到這樣:
>>> replacements = {'v':'u', u'v̄':u'ǖ', u'v́':u'ǘ', u'v̌':u'ǚ', u'v̀':u'ǜ'}
>>> s = u'lv́'
>>> for v, u in replacements.items():
... s = s.replace(v, u)
...
>>> s
'lǘ'
但是,當我與str.maketrans
試了一下,它拋出一個ValueError:
>>> str.maketrans({'v':'u', u'v̄':u'ǖ', u'v́':u'ǘ', u'v̌':u'ǚ', u'v̀':u'ǜ'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: string keys in translate table must be of length 1
是否有可能使用unicode的str.maketrans
和str.tranlsate
?
如果不是,那麼適當的單個正則表達式替換是否會實現所需的輸出?或者它也不可能?
我不認爲'maketrans'會在這裏工作。我認爲一個正則表達式也不會真正起作用。 (你可以讓一個調用每個替換函數的函數,但這似乎是一個奇怪的解決方案。)你的原代碼有什麼問題? – smarx
無論任何形式的「v」是否出現在原始字符串中,原始代碼都會進行5次操作。我認爲'str.maketrans'和'str.translate'是可能的,因爲它對於非Unicode字符串通常是正常工作的。 – alvas
我相信'str.maketrans'可以在unicode下正常工作,但只有映射的「from」一邊由長度爲1的字符串組成時纔有效。 – smarx