Denis Koroskin wrote:
On Thu, 19 Feb 2009 19:00:41 +0300, Andrei Alexandrescu <[email protected]> wrote:

[snip]
This is a little example of managing groups in Python:

import re
data = ">hello1 how are5 you?<"
patt = re.compile(r".*?(hello\d).*?(are\d).*")
patt.match(data).groups()
('hello1', 'are5')

auto data = ">hello1 how are5 you?<";
auto iter = match(data, regex(r".*?(hello\d).*?(are\d).*"));
foreach (i; 0 .. iter.engine.captures)
     writeln(iter.capture[i]);


I would expect that to be

foreach (/*Capture */ i; 0 .. iter.engine.captures)
    writeln(i);

(notes that here all groups are found eagerly. If you want a lazy matching in Python you have to use re.finditer() or matchobj.finditer()). I may like a syntax similar to this, where opIndex() allows to find the matched group:

patt.match(data)[0]
'hello1'
patt.match(data)[1]
'are5'

No go due to confusions with random-access ranges.


Why iter.capture[0] and iter.capture[1] aren't good enough?
How are they different from iter.engine.captures[0] and iter.engine.captures[1]?

Why it is a no go if you access iter.captures as a random-access range?

I'm sorry if these are dumb questions, but the code you've shown is a bit confusing (these iter.engine.captures and iter.captures).

They're good. The code I posted was dumb. The "engine" thing does not belong there, and "captures" should be indeed a random-access range.


Andrei

Reply via email to