Объединение строк за скобками

Рейтинг: 1Ответов: 2Опубликовано: 01.11.2014

Пытаюсь решить задачку:

A backslash is used to escape a quote so it can be used in strings such as 'It's me' and "She said "Hello"". The special symbol '\n' is used to add a line break to a string. Print out this text using one string: The name of this ice-cream is "Sweeet'n'Tasty"

Исходник:

dont_worry = "Don't worry about apostrophes"
print(dont_worry)
print("The name of this ice-cream is \"Sweeet\"")
print('text')

Мое решение неправильное:

dont_worry = "Don't worry about apostrophes"
print(dont_worry)
print("The name of this ice-cream is \"Sweeet\'n\'Tasty\"")
print('Tasty')

Как объединить две строки?

Ответы

▲ 1

Чтобы заэкранировать все кавычки, используя обратный слэш (\) на Питоне:

# -*- coding: utf-8 -*-
# входная строчка с новыми строками и кавычками
input_string = '''The name of this
ice-cream is "Sweeet'n'Tasty"'''
# выводим строку, подходящую для использования как строковая константа в Питоне
print(repr(input_string))
# -> 'The name of this\nice-cream is "Sweeet\'n\'Tasty"'

Новая строка превратилась в \n, и одинарные кавычки заэскейплены. В Питоне нужно эскейпить только внешние кавычки, поэтому двойные кавычки остались как есть.

Если хочется заэкранировать все кавычки, новые строки, то можно использовать регулярные выражения:

import re

s = re.sub(r'''('|")''', r'\\\1', input_string) # заменяем кавычки
print(re.sub(r'\n', r'\\n', s)) # заменяем новые строки
# -> The name of this\nice-cream is \"Sweeet\'n\'Tasty\"

Если не нужно поддерживать более сложные преобразования, то можно использовать str.replace метод:

s = input_string
for c in '\'"':
    s = s.replace(c, '\\' + c)
print(s.replace('\n', '\\n'))

Этот код выводит тот же результат.

Обновление

@chemtech мой ответ показывает, как можно сгенерировать строковую константу для решения задачи, описанной в вопросе: Print out this text using one string: The name of this ice-cream is "Sweeet'n'Tasty" (новая строка добавлена для полноты и проверки понимания). Картинка же просто просит заменить "'" (внешние двойные кавычки) на '\'' (на одинарные) прямо в исходном коде. Просто следуй инструкции.

▲ 1

Тоже столкнулся с этой проблемой. В который раз перечитывал "can be used in strings such as 'It\'s me' and "She said \"Hello\"" и решил, что в print ' ' нужно эскейпить только одинарные скобки, а в print " " - двойные. Попробовал - и действительно.