Escapar '“' con comillas dobles normales utilizando expresiones regulares Rubí

StackOverflow https://stackoverflow.com/questions/2909924

  •  04-10-2019
  •  | 
  •  

Pregunta

Tengo texto que tiene estas citas dobles de lujo: '“' y me gustaría reemplazarlos con comillas dobles normales utilizando Rubí gsub y expresiones regulares. He aquí un ejemplo y lo que tengo hasta ahora:

sentence = 'This is a quote, “Hey guys!”'  

I couldn't figure out how to escape double quotes so I tried using 34.chr:
sentence.gsub("“",34.chr).  This gets me close but leaves a back slash in front of the double quote:

sentence.gsub("“",34.chr) => 'This is a quote, \"Hey guys!”' 
¿Fue útil?

Solución

Las barras invertidas sólo se están presentando en irb debido a la forma en que se imprime el resultado de un comunicado. Si en lugar de pasar la cadena gsubed a otro método, como puts, verá la representación "real" después de secuencias de escape se traducen.

1.9.0 > sentence = 'This is a quote, “Hey guys!”'  
 => "This is a quote, \342\200\234Hey guys!\342\200\235" 
1.9.0 > sentence.gsub('“', "'")
 => "This is a quote, 'Hey guys!\342\200\235" 
1.9.0 > puts sentence.gsub('“', "'")  
This is a quote, 'Hey guys!”
 => nil

Tenga en cuenta también que después de la salida de puts, vemos => nil lo que indica que la llamada a puts nil devuelto.

Probablemente se dio cuenta de que la cita divertida todavía está en el final de la salida a puts: esto se debe a las citas son dos diferentes secuencias de escape, y sólo nombrado uno. Pero podemos cuidar de que, con una expresión regular en gsub:

1.9.0 > puts sentence.gsub(/(“|”)/, 34.chr)
This is a quote, "Hey guys!"
 => nil

Además, en muchos casos se puede intercambiar entre comillas simples y comillas dobles en las cadenas de Ruby - comillas dobles realizan expansión, mientras que las comillas simples no lo hacen. Aquí hay un par de maneras que usted puede obtener una cadena que contiene sólo una doble cita:

1.9.0 > '"' == 34.chr
 => true 
1.9.0 > %q{"} == 34.chr
 => true 
1.9.0 > "\"" == 34.chr
 => true 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top