Forum: Ruby simple regexp help needed - pull phrase out of string

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Max W. (Guest)
on 2008-10-09 20:34
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)
Rob B. (Guest)
on 2008-10-09 20:41
(Received via mailing list)
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
Patrick He (Guest)
on 2008-10-10 08:04
(Received via mailing list)
Hello Max,

Maybe you can try this regex pattern:

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


Regards,
Patrick
Max W. (Guest)
on 2008-10-10 13:05
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.
Sebastian H. (Guest)
on 2008-10-10 13:15
(Received via mailing list)
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"
Max W. (Guest)
on 2008-10-10 17:25
Even better, many thanks.
This topic is locked and can not be replied to.