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).
Andrei