Сбежать «» с обычными двойными кавычками, используя Ruby Regex

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

  •  04-10-2019
  •  | 
  •  

Вопрос

У меня есть текст, который имеет эти модные двойные кавычки: «», и я хотел бы заменить их регулярными двойными цитатами, используя Ruby GSUB и Regex. Вот пример и то, что у меня до сих пор:

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!”' 
Это было полезно?

Решение

Обратные косая черта проявляются только в irb Из-за того, как он распечатывает результат заявления. Если вы вместо этого проходите gsubed string в другой метод, такой как puts, вы увидите «настоящее» представление после перевода после побега.

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

Обратите внимание, что после выхода puts, мы видим => nil указывает на это призыв к puts вернулся nil.

Вы, вероятно, заметили, что забавная цитата все еще находится в конце вывода, чтобы puts: Это потому, что цитаты - это две разные эвакуирующие последовательности, и мы только назвали его. Но мы можем позаботиться об этом с регелем в gsub:

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

Кроме того, во многих случаях вы можете поменять отдельные кавычки и двойные кавычки в Ruby Stripes - двойные цитаты выполняют расширение, в то время как отдельные цитаты не делают. Вот пара параметров, которыми вы можете получить строку, содержащую только двойную цитату:

1.9.0 > '"' == 34.chr
 => true 
1.9.0 > %q{"} == 34.chr
 => true 
1.9.0 > "\"" == 34.chr
 => true 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top