Можно ли заменить один символ двумя с помощью макетранса?

1

Я хочу заменить символ 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
Теги:
string
translation

2 ответа

2
Лучший ответ

Да, это возможно. Вы должны предоставить 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
0

Вы также можете сделать это с помощью 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню