re = /# Look for `Wild Draw Four` or simply `Wild`
# `W` stored in \1, `D` and `F` stored in \2 and \3, respectively
(W)I\ LD(?:\ (D)raw\ (F)our)?
|
# Look for `Draw Two` or `Draw Four`
# `D` stored in \4, `T` or `F` stored in \5
(D)raw\ (?|(T)wo|(F)our)
|
# Look for the color and then the card type or number value
# `R`, `G`, `Y`, and `B` stored in \6
# `S`, `R` or number value stored in \7
(?:(?|(R)ed|(G)reen|(Y)ellow|(B)lue)\
(?|(S)kip
|(R)everse
|(\d)
)
)/x
str = 'GIVEN:
Green 4 Green 4 Green 7 WI LD Green 9 Green 9 Red 3 Red 3 Red 4 WI LD Draw Four Red 5 Red Reverse Yellow 0 Yellow Skip Green 8 WI LD Draw Four
DESIRED:
G4 G4 G7 W G9 G9 R3 R3 R4 WDF R5 RR Y0 YS G8 WDF
'
subst = '\\1\\2\\3\\4\\5\\6\\7'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html