[Jprogramming] Regex question: rxapply for multiple matches with multiple verbs

Raul Miller rauldmiller at gmail.com
Thu Jul 15 22:34:59 HKT 2010


On Thu, Jul 15, 2010 at 7:11 AM, Mark Allen <allenam at tcd.ie> wrote:
> m =: '(rev[0-9]*).*(rot[0-9]*)'
> (m;,1) |. rxapply 'rev3 rot5'
> 3ver rot5
> (m;,2) _2&|. rxapply 'rev3 rot5'
> rev3 t5ro
>> Is there any way in which i can apply the two verbs at once in the same
> expression?

I am a bit confused by the design of rxapply. The index
is required to be a rank 1 list but only the first element
of that list is used. So, at its heart, it has a scalar
design.
You would probably be better off writing your own
replacement for rxapply using rxmatches, rxfrom
and rxmerge.
Personally, if I were doing this, I think I would do something
like:
require'regex'
rxapplies=:1 :0
: mat=.,/}."2 x rxmatches y
 r=.((#m)|i.}:$mat) m 1 :(':';'(x{m)`:6 y')&.> mat rxfrom y
 r mat rxmerge y
)
 M=: '(rev[0-9]*).*(rot[0-9]*)'
 M |.`(_2&|.) rxapplies 'rev3 rot5'
(You can use identity functions for placeholders
and if you need to deal with the entire match instead
of one of the sub-matches you can fall back on
rxapply.)
FYI,
-- 
Raul


More information about the Programming mailing list

AltStyle によって変換されたページ (->オリジナル) /