Як включити лапку в необроблений рядок Python


90

Розглянемо:

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

Отже, як отримати котирування, але не скісну риску?

І, будь ласка, не пропонуйте r'what"ever', бо тоді просто постає питання, як ми включаємо обидва типи цитат?

Пов’язані


У мотивуючому випадку використання для необроблених рядків (регулярні вирази та інші випадки, коли щось інше, ніж Python інтерпретує зворотні слеші), зворотна коса риса є чудовою, оскільки вона буде оброблена двигуном регулярних виразів / будь-яким механізмом. Це стосується не всіх випадків, коли вам може знадобитися використовувати необроблені рядки, але не забудьте подумати, чи стосується це вашого випадку використання, перш ніж намагатись видалити зворотні риски.
— user2357112 підтримує Моніку

Відповіді:


147

Якщо ви хочете використовувати подвійні лапки в рядках, але не одинарні лапки, ви можете просто використовувати одинарні лапки як роздільник:

r'what"ever'

Якщо вам потрібні обидва типи лапок у вашому рядку, використовуйте рядок із потрійними лапками:

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

Якщо ви хочете включити обидва типи рядків із потрійними лапками у свій рядок (вкрай малоймовірний випадок), ви не можете цього зробити, і вам доведеться використовувати несирі рядки з екранованими екранами.


1
Відмінно. Мені знадобилася секунда, щоб зрозуміти, що я міг би також робити необроблені рядки з потрійними лапками.
— mpen

3
Мені теж подобається останній абзац ... це саме те, що я намагався з’ясувати. Обмеження різних стилів цитування. Я порівнюю Python r"raw string"та C # @"@-quoted string"і"""triple quotes"""
— mpen

2
Python newb тут, трохи заплутаний, чи не r'what"ever"помилка аналізу? Ви мали на увазі r'what"ever'?
— нмр

1
Що не так із розробниками Python? Чому вони просто не запровадили систему втечі, як це роблять усі інші мови?
— Джембі,

6
@Jamby У них дійсно є система втечі, ви просто використовуєте її з несировинним рядком (рядки без букви r перед ними), і вона працює як майже будь-яка інша мова .
— Коберн

10

Python має кілька способів робити рядки. Наступний синтаксис рядка дозволить вам використовувати подвійні лапки:

'''what"ever'''

Ви пропустили необроблену частину запитання.
— mpen

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"""

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"'

або скористайтеся описаним вище способом побудови декількох рядків із змішаними символами "і", а потім об'єднання їх після факту.


1

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

var_a = 10

f"""This is my quoted variable: "{var_a}". """

f-strings підтримують втечу, правда? Так ти можеш зробити 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 + '/'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.