Simple regexp help needed - pull phrase out of string


#1

Hey folks. I feel like this should be easy but it’s been a long week
and my brain hurts.

If i have a string like this:

string = “pending: sent at Thu Oct 09 17:25:08 +0100 2008,
password:banana errors: couldn’t find user with id 230”

and i want to pull out ‘banana’, what’s an elegant way to do it? The
password will always be followed by a space.

I can think of this:
string.match(/password:[^\s]+/)[0].gsub(“password:”,"")

but it seems a bit clumsy and error prone. Is there a nicer way?
(Passwords can contain non alphanumeric characters btw)


#2

On Oct 9, 2008, at 12:31 PM, Max W. wrote:

I can think of this:
string.match(/password:[^\s]+/)[0].gsub(“password:”,"")

but it seems a bit clumsy and error prone. Is there a nicer way?
(Passwords can contain non alphanumeric characters btw)

irb> string = “pending: sent at Thu Oct 09 17:25:08 +0100 2008,
password:banana errors: couldn’t find user with id 230”
=> “pending: sent at Thu Oct 09 17:25:08 +0100 2008,\npassword:banana
errors: couldn’t find user with id 230”
irb> string.match(/password:(.*) errors:/)[1]
=> “banana”

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#3

Hello Max,

Maybe you can try this regex pattern:

irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
=> ["banana"]

Regards,
Patrick


#4

Max W. wrote:

  irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
  => [“banana”]

Aha, ‘scan’, that’s great thanks.

Yeah, though not really the most sensible in this case. Also you’d have
to do
[0][0] to acutally get “banana”. I’d only use scan when you actually
want
multiple matches. Here I’d use match or String#[]:
string[/password:(\S+)/, 1]
=> “banana”


#5

Patrick He wrote:

Hello Max,

Maybe you can try this regex pattern:

irb(main):007:0> str.scan(/password:([^\s]+)/)[0]
=> ["banana"]

Regards,
Patrick

Aha, ‘scan’, that’s great thanks.


#6

Even better, many thanks.