ariamckinley
ariamckinley

Reputation: 1132

Changing "word" to "Word" using a RegEx like [A-Z]([a-z]*)\b

The title sums up my conundrum pretty well. I've been searching around the net for a while, and being new to Ruby and Regular Expressions as a whole, I'm stuck trying to figure out how to alter the case of a single word string using a RegEx "filter" such as [A-Z]([a-z]*)\b.

Basically I want the flow to be

input: woRD
filter: [A-Z]([a-z]*)\b
output: Word

I already have the words filtered into a list, so I don't need to match words; I only need to filter the case of the word using a RegEx filter.

I do not want to use standard capitalization methods, I want this to be done using Regular Expressions.

Upvotes: 0

Views: 106

Answers (3)

PatNowak
PatNowak

Reputation: 5812

You can't use Regex to such altering as you want to do. Please read carefully this topic: How to change case of letters in string using regex in Ruby.

The best way to solve your problem is to use:

"woRD".downcase.capitalize

or

name_of_your_variable.downcase!.capitalize!

if you want to alter string in your variable permanently without need of assign it to other variable.

Upvotes: 0

Aleksei Matiushkin
Aleksei Matiushkin

Reputation: 121010

Well, for some reason you want to use regexps. Here you go:

# prepare hashes for gsub
to_down = (to_upper = Hash[('a'..'z').zip('A'..'Z')]).invert

# convert to downcase
downcased = 'woRD'.gsub(/[A-Z]/, to_down)
# ⇛ 'word'

titlecased = downcased.gsub(/^\w/, to_upper)
# ⇒ 'Word'

Hope it helps. Note the usage of String#gsub(re, hash) method.

Upvotes: 1

Kranthi
Kranthi

Reputation: 1417

You can use

"woRD".downcase.capitalize

Ruby provides some predefined methods for these type of functionality. Try to use them instead of regex. which saves coding time!

Upvotes: 1

Related Questions