Zitiere mein Zitat!

13

Ein Zitat ist "die Wiederholung eines Ausdrucks als Teil eines anderen". Im amerikanischen Englisch wird ein Anführungszeichen wie im vorherigen Satz in doppelte Anführungszeichen (") gesetzt. Diese Regel unterscheidet sich jedoch, wenn ein Anführungszeichen in einem anderen Anführungszeichen steht. In diesem Fall wird das innere Anführungszeichen in einfache Anführungszeichen gesetzt (').

Herausforderung

Wenn Sie eine Zeichenfolge als Eingabe angeben, geben Sie eine zitierfähige Version dieser Zeichenfolge aus, indem Sie doppelte und einfache Anführungszeichen austauschen, die für das innere Anführungszeichen verwendet werden.

Es gibt jedoch nur einen Haken: Nicht alle einfachen Anführungszeichen werden für Anführungszeichen verwendet! Bei dieser Herausforderung wird das einfache Anführungszeichen nur dann für die Anführungszeichen verwendet, wenn:

  • Vor der Marke steht ein nicht alphanumerisches Zeichen oder
  • Der Markierung folgt ein nicht alphanumerisches Zeichen, das kein Leerzeichen ist

Die für Zitate verwendeten Noten sind garantiert ausgewogen; Das heißt, Sie müssen ungültige Eingaben nicht verarbeiten. Darüber hinaus werden doppelte Anführungszeichen nur in Situationen verwendet, in denen einfache Anführungszeichen zur Darstellung von Anführungszeichen verwendet werden können.

Testfälle

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

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache!

musicman523
quelle
Sandbox
musicman523
2
... if' it" runs' deep"hat einfache Anführungszeichen, denen kein nicht-alphanumerisches Zeichen vorangestellt ist und denen kein "nicht-alphanumerisches Zeichen, das kein Leerzeichen ist" folgt, und die dennoch transformiert werden!
Value Ink
1
Persönlich glaube ich nicht, dass der Umgang mit Apostrophen der Herausforderung einen hohen Stellenwert einräumt.
ATaco
1
@ JonathanAllan Ja. Ich denke, es ist schwierig zu bestimmen, ob diese einfachen Anführungszeichen für Zitate oder Besitz verwendet werden, ohne die Regeln zutiefst zu komplizieren. Ich denke, das wäre eine anständige Herausforderung für sich.
musicman523
1
"Nested, 'quotes, it's unfortunate', to be sure."- Ich denke, Sie brauchen einen verschachtelten Fall mit Kontraktionen.
Magic Octopus Urn

Antworten:

2

Ruby , 64 66 65 64 + 1 = 65 67 66 65 Bytes

+1 Byte für das -nFlag.

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

Probieren Sie es online!

Wert Tinte
quelle
Scheint nicht das Richtige für einfache Anführungszeichen zu tun, denen ein Leerzeichen (das in der Tat für Anführungszeichen verwendet wird)
vorangestellt ist
@ musicman523 Danke, behoben!
Wert Tinte
2

Retina , 34 27 Bytes

-7 Bytes dank @Leo

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

Probieren Sie es online!

ovs
quelle
Bei @carusocomputing said, "Nested, 'quotes, it's unfortunate', to be sure."der Eingabe wird das folgende einfache Anführungszeichen unfortunatenicht in ein doppeltes Anführungszeichen geändert, sondern sollte es sein. Wenn es Ihnen beim Debuggen hilft, funktioniert es, wenn das Komma vor dem Anführungszeichen steht. (Ich kenne Retina nicht, also kann ich nicht weiter helfen.)
musicman523
@ musicman523 repariert es
ovs
Sie können \ w direkt in Ihrer Charakterklasse verwenden
Leo
0

JavaScript (ES6), 90 Byte

Angenommen, die Zeichenfolge enthält nicht #.

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

darrylyeo
quelle