Избегая '' 'с регулярными двойными кавычками, используя регулярное выражение Ruby - PullRequest
3 голосов
/ 26 мая 2010

У меня есть текст с такими причудливыми двойными кавычками: «», и я хотел бы заменить их обычными двойными кавычками, используя 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!”' 

1 Ответ

9 голосов
/ 26 мая 2010

Обратная косая черта отображается только в irb из-за способа, которым она печатает результат оператора. Если вместо этого вы передадите строку gsub ed другому методу, например puts, вы увидите «реальное» представление после преобразования escape-последовательностей.

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: это потому, что кавычки - это две разные escape-последовательности, и мы назвали только одну. Но мы можем позаботиться об этом с помощью регулярного выражения в gsub:

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

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

1.9.0 > '"' == 34.chr
 => true 
1.9.0 > %q{"} == 34.chr
 => true 
1.9.0 > "\"" == 34.chr
 => true 
...