Сбежать «» с обычными двойными кавычками, используя Ruby Regex
Вопрос
У меня есть текст, который имеет эти модные двойные кавычки: «», и я хотел бы заменить их регулярными двойными цитатами, используя 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
Из-за того, как он распечатывает результат заявления. Если вы вместо этого проходите gsub
ed 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