Regexp Capture Access

Given that:

%r{(\w,)+}.match(‘a,b,c’)[0] #=> “a,b,”

and

%r{(\w,)+}.match(‘a,b,c’)[1] #=> “b,”

How do I access the capture that contains “a,”?

Try:

%r{(\w,)+}.match(‘a,b,c’).to_s[0…1] #=> “a,”

2008/4/2, Oliver S. [email protected]:

On Wed, Apr 2, 2008 at 3:20 PM, Oliver S.
[email protected] wrote:

Posted via http://www.ruby-forum.com/.

Use scan

“a,b,c”.scan(/\w+,/) --> [‘a,’, ‘b,’]
and in order to have the whole match you have to join the result of scan
again.

HTH
Robert


http://ruby-smalltalk.blogspot.com/


Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

The reason why it’s acting like this is because Regexes try to find the
largest possible match from your expression. Hence, your expression

%r{(\w,)+}.match(‘a,b,c’)[0]

will return the first match (and largest) “a,b,”

Im sure you’re asking this for a bigger reason, so you have to refine
your
regular expression for that specific purpose. if you just want to split
based on a “,” then simply do ‘a,b,c’.split(’,’) which returns an array
[“a”, “b”, “c”]

If any other, please post the actual problem.

HTH
Mutahhir.

On Wed, Apr 2, 2008 at 8:20 AM, Oliver S.
[email protected] wrote:

Given that:

%r{(\w,)+}.match(‘a,b,c’)[0] #=> “a,b,”

and

%r{(\w,)+}.match(‘a,b,c’)[1] #=> “b,”

How do I access the capture that contains “a,”?

Maybe leave the plus symbol (+) out?

r = /(\w,)/
r.match(‘hi,a,b,c’)[1]
=> “i,”

I’d probably use #scan, or even #split, instead.

Todd

Nevermind. I was trying to parse CSV. I thought pre-written tools
weren’t capable of understanding quoted values with commas inside but I
was wrong so I can use them.

I do find it amazing that you can’t access multiple matches for a single
sub-pattern though. That’s a serious limitation IMO.

On Wed, Apr 2, 2008 at 9:27 AM, Robert D. [email protected]
wrote:

Use scan

“a,b,c”.scan(/\w+,/) --> [‘a,’, ‘b,’]
and in order to have the whole match you have to join the result of scan again.

HTH
Robert

Yeah, I was thinking of that regexp also, but I assumed the OP wanted
the last word letter before a comma.

Oliver, what is it that you’re looking for?

Todd

On Wed, Apr 2, 2008 at 10:28 AM, Oliver S.
[email protected] wrote:

Nevermind. I was trying to parse CSV. I thought pre-written tools
weren’t capable of understanding quoted values with commas inside but I
was wrong so I can use them.

I do find it amazing that you can’t access multiple matches for a single
sub-pattern though. That’s a serious limitation IMO.

I’m not sure I understand this correctly, because I think your pattern
was wrong.

Todd

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs