Цитировать мою цитату!

13

Цитата является «повторением одного выражения , как часть другого». В американском английском кавычка заключена в двойные кавычки ("), как в предыдущем предложении. Однако это правило отличается, когда кавычка появляется внутри другой кавычки. В этом случае внутренняя кавычка окружена одинарными кавычками ( ').

Вызов

Задав строку в качестве входных данных, выведите цитируемую версию этой строки, заменив двойные и одинарные кавычки, которые используются для внутренней кавычки.

Однако есть только одна загвоздка - не все одинарные кавычки используются для цитирования! Для этой задачи одинарная кавычка используется для цитаты, если и только если:

  • Знак предшествует не алфавитно-цифровому символу, или
  • За меткой следует не буквенно-цифровой символ, который не является пробелом

Оценки, используемые для цитат, гарантированно будут сбалансированы; то есть вам не нужно обрабатывать неверный ввод. Кроме того, двойные кавычки будут использоваться только в ситуациях, когда одинарные кавычки могут использоваться для представления цитаты.

Тестовые случаи

A man, a plan, a canal, Panama.
"A man, a plan, a canal, Panama."

Socrates once said, "An unexamined life is not worth living."
"Socrates once said, 'An unexamined life is not worth living.'"

@musicman523 said, "Socrates once said, 'An unexamined life is not worth living.'"
"@musicman523 said, 'Socrates once said, "An unexamined life is not worth living."'"

"Nested 'quotes "can 'cause "recursion," if,' it," runs,' deep!"
"'Nested "quotes 'can "cause 'recursion,' if," it,' runs," deep!'"

"Contractions' behaviors can't be easy to account for," he warned.
"'Contractions' behaviors can't be easy to account for,' he warned."

@carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."
"@carusocomputing said, 'Nested, "quotes, it's unfortunate", to be sure.'"

счет

Это , поэтому выигрывает самый короткий ответ на каждом языке!

musicman523
источник
Песочница
musicman523
2
... if' it" runs' deep"имеет одинарные кавычки, которым не предшествует не алфавитно-цифровая, и за ними не следует «не алфавитно-цифровой символ, который не является пробелом», и все же они преобразуются!
Чернила стоимости
1
Лично я не чувствую, что обработка апострофов добавляет много значения к проблеме.
ATaco
1
@JonathanAllan Да. Я думаю, что трудно определить, используются ли эти одинарные кавычки для цитаты или владения без глубокого усложнения правил. Я думаю, что это сделало бы достойный вызов сам по себе.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."- Я думаю, вам нужен вложенный случай с сокращениями.
Волшебная Урна Осьминога

Ответы:

2

Ruby , 64 66 65 64 + 1 = 65 67 66 65 байт

+1 байт за -nфлаг.

gsub(/"|(?<!\w)'|'(?!\w|\s)/){"'\""["\"'".index$&]}
$><<?"+$_+?"

Попробуйте онлайн!

Значение чернил
источник
Похоже, что не работает с одиночными кавычками, перед которыми стоит пробел (которые действительно используются для цитат)
musicman523
@ musicman523 спасибо, исправлено!
Value Ink
2

Сетчатка , 34 27 байт

-7 байт благодаря @Leo

T`'"`"'`\W'|"|'[^\w ]
^|$
"

Попробуйте онлайн!

овс
источник
В @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."качестве входных данных последующие одинарные кавычки unfortunateне изменяются на двойные, а должны быть. Если это помогает вам отладить, оно работает, когда запятая стоит перед кавычкой. (Я не знаю Retina, поэтому больше ничего не могу поделать.)
musicman523
@ musicman523 зафиксировал его
овс
Вы можете использовать \ w прямо внутри класса вашего персонажа
Лев
0

JavaScript (ES6), 90 байт

Предполагается, что строка не содержит #.

s=>'"'+s[r='replace'](/"/g,'#')[r](/(\W)'/g,'$1"')[r](/'([^\w ])/g,'"$1')[r](/#/g,"'")+'"'

darrylyeo
источник