Я хочу заменить символ with на ae. Как я могу получить это? Вот моя попытка с maketrans
и translate
:
word = 'være'
letters = ('å','ø', 'æ')
replacements = ('a','o','ae')
table = word.maketrans(letters, replacements)
#table = word.maketrans(''.join(letters),''.join(replacements))
word_translated = word.translate(table)
print(word_translated)
Это генерирует ошибки:
TypeError: maketrans() argument 2 must be str, not tuple
ValueError: the first two maketrans arguments must have equal length
Да, это возможно. Вы должны предоставить dict
качестве аргумента для maketrans()
. Как указано в документации
Если есть только один аргумент, это должен быть словарь, отображающий ординалы Юникода (целые числа) или символы (строки длиной 1) в ординалы Юникода, строки (произвольной длины) или None. Затем символьные ключи будут преобразованы в порядковые номера.
word = 'være'
letters = ('å','ø', 'æ')
replacements = ('a','o','ae')
table = word.maketrans(dict(zip(letters, replacements)))
word_translated = word.translate(table)
print(word_translated)
выход
vaere
Вы также можете сделать это с помощью re.sub
:
import re
word = 'være'
letters = ('å','ø', 'æ')
replacements = ('a','o','ae')
table = dict(zip(letters, replacements))
translated = re.sub('|'.join(map(re.escape, letters)),
lambda m: table.get(m.group(0)),
word)
print(translated)
печатает:
vaere