Reputation: 581
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
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
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
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