Як включити лапку в необроблений рядок 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.