Regular expressions

I have string as “12345678”, Anybody assist me to convert this string
as “12-34-5678” and “1234-56-78”. yes this is exactly Date format.

On Dec 26, 2013, at 9:37 AM, Selvag R. [email protected] wrote:

I have string as “12345678”, Anybody assist me to convert this string
as “12-34-5678” and “1234-56-78”. yes this is exactly Date format.

text = 12345678

puts “#{\$1}-#{\$2}-#{\$3}” if text =~ /\A(\d{4})(\d{2})(\d{2})\z/
puts “#{\$1}-#{\$2}-#{\$3}” if text =~ /\A(\d{2})(\d{2})(\d{4})\z/

Also:
puts “#{\$3}-#{\$2}-#{\$1}” if text =~ /\A(\d{2})(\d{2})(\d{4})\z/

The \$1, \$2, and \$3 correspond to the captured matches (the patterns
between parentheses) in order of appearance within the full regular
expression.

HTH,
Ammar

On Thu, Dec 26, 2013 at 8:37 AM, Selvag R. [email protected]
wrote:

I have string as “12345678”, Anybody assist me to convert this string
as “12-34-5678” and “1234-56-78”. yes this is exactly Date format.

What do you want to do with it subsequently? If it is a date it
should be parsed as a Date.

Kind regards

robert

On Thu, Dec 26, 2013 at 2:50 AM, Ammar A. [email protected]
wrote:

Also:
puts “#{\$3}-#{\$2}-#{\$1}” if text =~ /\A(\d{2})(\d{2})(\d{4})\z/

The \$1, \$2, and \$3 correspond to the captured matches (the patterns
between parentheses) in order of appearance within the full regular
expression.

HTH,
Ammar

My turn:

text=“12345678”
p “%s%s-%s-%s” % text.scan(/\d{2}/) if text[/\d{8}/] # =>
1234-56-78
p “%s-%s-%s%s” % text.scan(/\d{2}/) if text[/\d{8}/] # => *“*12-34-5678”

Hi Robert, I am getting the numbers within quotes and need convert this
to date format to store in DB.

On Fri, Dec 27, 2013 at 5:29 AM, Selvag R. [email protected]
wrote:

Hi Robert, I am getting the numbers within quotes and need convert this
to date format to store in DB.

Then it seems even more appropriate to use class Date instead of a
String representation. Usually DB drivers support handling the data
with proper types. Or is the field in the database of type VARCHAR?
That would be bad design IMHO.

Kind regards

robert

you can also pass a block to match:

``````text.match(/\A(\d{4})(\d{2})(\d{2})\z/) { puts "#{\$1}-#{\$2}-#{\$3}" }
``````

Alternatively, if you are looking to do some work with those dates:

``````require 'date'
Date.strptime("20131227", "%Y%m%d")
``````

While it eats a bit more resource, this has the nice side effect of
tossing
you an error if the data you are parsing does not generate a valid date
from rubyland, instead of relying on whatever backend database you are
using to perform the validation as it casts the formatted string into a
timestamp representation, etc.

randym