# Strings that contain quote marks

**URL:** <https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053>\
**Category:** Ruby\
**Created:** [January 24, 2008, 5:00pm UTC](https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053 "2008-01-24T17:00:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2008, 5:00pm UTC](https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053/1 "2008-01-24T17:00:52Z")

</div>

Sorry if this post is a duplicate, I’m having problems with my posts  
posting.

Hello,  
I’ve searched through the Ruby documentation to try and figure this  
out - no luck at all, also searched google to see if anyone had  
written about this. Any help or direction on where to find the answer  
would be much appreciated!

This is in a rails project, but I think the answer lies in Ruby’s  
string methods.  
I’ve got an object that has a list of materials attached to it, so in  
my model I grab all the materials and convert them into a string -  
like this:

self.materials.collect{ |x| x.material.strip.humanize.split.map{ |w|  
w.capitalize}.join(’ ‘)}.join(’, ')

So I break apart each material by word, capitalize it, put that  
material string back together and then join all the materials by  
commas.

This works great, except that some of the materials are books with the  
titles surrounded by quotes -  
Book “the Snowy Day,” By Ezra Jack Keats

So my code above works, except for the first letter after the initial  
"  
Is there a method to deal with this, so that it correctly capitalizes  
the first letter after the " if there is a quote? I’ve tried a lot of  
different things, but nothing is giving me the results I need.

Anyone have any ideas?  
Thanks!

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2008, 5:28pm UTC](https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053/2 "2008-01-24T17:28:37Z")

</div>

On Jan 24, 2008 10:59 AM, removed\_email\_address@domain.invalid  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> string methods.
> 
> Anyone have any ideas?  
> Thanks!

Try changing split to split(/\b/), then change join(’ ') to just join:

irb(main):001:0\> material = ‘Book “the Snowy Day,” By Ezra Jack Keats’  
=\> “Book "the Snowy Day," By Ezra Jack Keats”

irb(main):002:0\> material.strip.split.map{ |w| w.capitalize }.join(’ ')  
=\> “Book "the Snowy Day," By Ezra Jack Keats”

irb(main):003:0\> material.strip.split(/\b/).map{ |w| w.capitalize }.join  
=\> “Book "The Snowy Day," By Ezra Jack Keats”

The split on /\b/ splits on word boundaries, preserving all the spaces  
and punctuation between. That’s why the join no longer needs spaces:

irb(main):004:0\> material.strip.split(/\b/)  
=\> [“Book”, " "", “the”, " ", “Snowy”, " ", “Day”, "," ", “By”, " ",  
“Ezra”, " ", “Jack”, " ", “Keats”]

-A

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 24, 2008, 5:31pm UTC](https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053/3 "2008-01-24T17:31:33Z")

</div>

-------- Original-Nachricht --------

> Datum: Fri, 25 Jan 2008 00:59:58 +0900  
> Von: “removed\_email\_address@domain.invalid” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> An: removed\_email\_address@domain.invalid  
> Betreff: strings that contain quote marks

> string methods.
> 
> Anyone have any ideas?  
> Thanks!

Dear Jon,

try this:

text=‘Book “the Snowy Day,” By Ezra Jack Keats’  
while /"([a-z])/.match(text)  
ref=/"([a-z])/.match(text)  
text.gsub!(ref[0],‘"’ + ref[1].capitalize)  
end  
p text

Best regards,

Axel

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 25, 2008, 8:05pm UTC](https://www.ruby-forum.com/t/strings-that-contain-quote-marks/127053/4 "2008-01-25T20:05:31Z")

</div>

Thanks for the help Axel and Alex, I ended up finding out that the  
inflector method titleize in rails  
did everything I needed it to do.
