Как включить цитату в необработанную строку Python

89

Рассмотреть возможность:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

Так как же получить цитату, а не косую черту?

И, пожалуйста, не предлагайте r'what"ever', потому что тогда возникает вопрос, как включить оба типа кавычек?

Связанный

mpen
источник
В мотивирующем случае использования необработанных строк (регулярных выражений и других случаев, когда что-то другое, кроме Python, интерпретирует обратную косую черту), обратная косая черта в порядке, потому что она будет обрабатываться механизмом регулярных выражений / любым другим механизмом. Это не относится ко всем случаям, когда вы, возможно, захотите использовать необработанные строки, но обязательно подумайте о том, применимо ли это к вашему варианту использования, прежде чем пытаться убрать обратную косую черту.
user2357112 поддерживает Монику

Ответы:

146

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

r'what"ever'

Если вам нужны оба типа кавычек в строке, используйте строку с тройными кавычками:

r"""what"ev'er"""

Если вы хотите включить в строку оба типа строк в тройных кавычках (что крайне маловероятно), вы не сможете этого сделать, и вам придется использовать необработанные строки с escape-символами.

Адам Розенфилд
источник
1
Превосходно. Мне потребовалась секунда, чтобы понять, что я могу сделать строки с тройными кавычками тоже необработанными.
mpen 07
3
Мне тоже нравится последний абзац ... это именно то, что я пытался выяснить. Ограничения разных стилей цитирования. Я сравниваю Python r"raw string"и C # @"@-quoted string"и"""triple quotes"""
mpen
2
Python newb здесь, немного запутался, это не r'what"ever"ошибка синтаксического анализа? Вы имели в виду r'what"ever'?
nmr
1
Что не так с разработчиками Python? Почему они просто не реализовали систему escape, как это делают все другие языки?
Jamby 02
6
@Jamby У них есть система экранирования, вы просто используете ее с необработанной строкой (строки без r перед ними), и она работает практически как любой другой язык .
Coburn
10

В Python есть несколько способов создания строк. Следующий строковый синтаксис позволяет использовать двойные кавычки:

'''what"ever'''
Карл
источник
Вы пропустили грубую часть вопроса.
mpen 07
10

Если вам нужен какой-либо тип цитирования (одинарное, двойное и тройное для обоих), вы можете «объединить» (0) строки:

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''

Вы также можете «комбинировать» (0) необработанные строки с необработанными строками:

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'

(0): Фактически, синтаксический анализатор Python объединяет строки, а не создает несколько строк. Если вы добавите оператор «+», будет создано и объединено несколько строк.

Бакуриу
источник
5

Неважно, ответ - необработанные строки в тройных кавычках:

r"""what"ever"""
mpen
источник
3

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

somestr = """This is a string with a special need to have a " in it at the end""""

Вы столкнетесь с ошибкой при выполнении, потому что кавычки "" "" (4) в строке сбивают читателя с толку, так как он думает, что уже достиг конца строки, а затем находит случайное "там". Вы можете проверить это вставив пробел в 4 кавычки, например: "" "", и ошибки не будет.

В этом особом случае вам нужно будет использовать:

somestr = 'This.....at the end"'

или используйте описанный выше метод построения нескольких строк со смешанными "и" с последующим их конкатенацией.

charrold303
источник
1

Просто чтобы включить новую функциональность, совместимую с Python f String:

var_a = 10

f"""This is my quoted variable: "{var_a}". """
иллюзия
источник
Хотя f-строки поддерживают экранирование, не так ли? Так что вы можете это сделать f"foo\"bar".
mpen
-3

Использование:

dqote='"'
sqote="'"

Используйте оператор "+" dqoteи squoteпеременные, чтобы получить то, что вам нужно.

Если захочу sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, можно попробовать следующее:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'
Зульфи123786
источник