2011-01-18 19 views
14

Próbuję pobrać dane z bazy danych MySQL i użyć Ruby do sformatowania go w plik tekstowy. Niektóre z moich danych MySQL zawiera cudzysłów tak:Usuń podwójne cudzysłowy ze stringa

Matthew "Matt" Perry

i muszę usunąć te cytaty i zastąpić je czymś innym, | na przykład.

znalazłem kolejny post stackoverflow o usuwaniu cudzysłowów, że proponowane następujące:

s.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 

ale która zwraca ciąg nienaruszone (z podwójnym cudzysłowie). Jak mogę uzyskać

Matthew |Matt| Perry

zamiast?

Odpowiedz

22

to zrobi to, jeśli nie chcesz zmodyfikować s:

new_s = s.gsub /"/, '|' 

Jeżeli chcesz zmodyfikować s:

s.gsub! /"/, '|' 
0

Usuwa doublequotes. Możesz je zobaczyć w IRB lub podczas korzystania z p tylko dlatego, że ciąg znaków jest wyświetlany w tych przypadkach w ładnym formularzu, co pozwala zobaczyć, że są one ciągami.

irb> 'Matthew "Matt" Perry'.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 
=> ["Matthew", "Matt", "Perry"] 

W rzeczywistości już nie mają podwójnych cytatów.

irb> puts 'Matthew "Matt" Perry'.scan(/'(.+?)'|"(.+?)"|([^ ]+)/).flatten.compact 
Matthew 
Matt 
Perry 
=> nil 

i zastąpić doublequotes z kreską, można użyć .tr:

irb> 'Matthew "Matt" Perry'.tr '"','|' 
=> "Matthew |Matt| Perry" 
+0

podziękowaniem wszyscy za pomoc! – Libby

4

Można użyć coś takiego:

text = 'Matthew "Matt" Perry' 

text.tr(%q{"'}, '|') # => "Matthew |Matt| Perry" 

text = "Matthew 'Matt' Perry" 
text.tr(%q{"'}, '|') # => "Matthew |Matt| Perry" 
+0

Zaklęcie składniowe SO nie powiodło się ponownie) – Nakilon

+0

to dlatego, że jest tak "wyjątkowy" i "wyjątkowy". :-) –

Powiązane problemy