Libby
Libby

Reputation: 581

Remove double quotes from string

I'm trying to grab data from a MySQL database and use Ruby to reformat it into a flat text file. Some of my MySQL data contains double quotes like so:

Matthew "Matt" Perry

and I need to remove those quotes and replace them with something else, | for instance.

I found another post on stackoverflow about removing quotes that suggested the following:

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

but that returns the string intact (with double quotes). How can I get

Matthew |Matt| Perry

instead?

Upvotes: 15

Views: 35673

Answers (4)

the Tin Man
the Tin Man

Reputation: 160631

You could use something like:

text = 'Matthew "Matt" Perry'

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

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

Upvotes: 5

DigitalRoss
DigitalRoss

Reputation: 146261

Other choices are:

s.tr! '"', '|'
s2 = s.tr '"', '|'

Upvotes: 0

Nakilon
Nakilon

Reputation: 35112

It removes doublequotes. You can see them in IRB or when using p only because string are being showed for you in these cases in nice form, allowing you to see, that they are strings.

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

In real, they already don't have doublequotes.

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

And to replace doublequotes with dash, you may use .tr:

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

Upvotes: 0

dontangg
dontangg

Reputation: 4809

This will do it if you don't want to modify s:

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

If you do want to modify s:

s.gsub! /"/, '|'

Upvotes: 24

Related Questions