Форматирование строки: необязательный раздел - PullRequest
2 голосов
/ 19 июня 2019

У меня есть следующий формат строки:

string = "{part1}_{part2}_{part3}"

Я хочу отформатировать строку, задав разные части для разных значений.Подвох в том, что part2 не обязателен.Поэтому я не могу сделать следующее, потому что это оставило бы у меня дублирующее подчеркивание:

result = string.format(part1="A", part2="", part3="B")
actual_result = "A__B"
desired_result = "A_B"

После этого я не могу заменить все дублирующие подчеркивания на одиночные, потому что строки, которые я использую для замены деталей, могут уже содержатьповторяющиеся подчеркивания:

result = string.format(part1="A__A", part2="", part3="B__B")
result = result.replace("__", "_")
actual_result = "A_A_B_B"
desired_result = "A__A_B__B"

Мое решение выглядит так, но мне интересно, есть ли что-то более элегантное.

ignore_str = "$IGNORE_STRING$"
string = "{part1}_{part2}_{part3}"

result = string.format(part1="A__A", part2=ignore_str, part3="B__B")    
result = result.replace("_" + ignore_str, "")
actual_result = "A__A_B__B"

Я надеялся, что есть крутой str.format() трюк, который я мог бы применить.Я знаю, что могу писать свои собственные классы форматирования, но это, кажется, производит намного больше кода и может стать довольно запутанным для читателя.

Я ищу решение, которое было бы питонным, элегантным и читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...