[2, 3]
If you want to get [2,3] in both cases, that will be really difficult.
As far as I know, you can only do that in C#, which has named capturing
groups. In all the other languages I know, the capturing groups are
numbered when they are found… That rules it out.
By the way, would it be difficult to implement named capturing groups
in regular expressions ? Would that interest someone ?
But, of course, that won’t capture “3m 2h”, like you described…
True…
So:
r = Regexp.new(/(\d+)h?m?.*(\d+)m?h?/)
'Course, then you’ll have [3, 2] for the edge case rather than [2,
3]…but to get the full functionality that the OP described (including
the case where just “2” is given), you’d need fancier logic than just
regexp anyhow.
If you want to get [2,3] in both cases, that will be really difficult.
As far as I know, you can only do that in C#, which has named capturing
groups. In all the other languages I know, the capturing groups are
numbered when they are found… That rules it out.
Well, just to contradict myself, although this is no one-liner:
def scan(str)
re = Regexp.new(/(\d+)h.(\d+)m|(\d+)m.(\d+)h/)
if m = re.match(str)
return [m[1], m[2]] if m[1]
return [m[4], m[3]]
end
end
Is there a smart regexp one liner that could produce
[2, 3]
If you want to get [2,3] in both cases, that will be really difficult.
As far as I know, you can only do that in C#, which has named capturing
groups. In all the other languages I know, the capturing groups are
numbered when they are found… That rules it out.
As far as I know, you can only do that in C#, which has named
capturing
groups. In all the other languages I know, the capturing groups are
numbered when they are found… That rules it out.
Python regexps have named capturing groups. It’s extremely helpful
if you need to construct complicated patterns; because the index of
each capturing group can eaasily change when you add and remove
things in the regexp.
Tom
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.