Skip to content

Commit 0726909

Browse files
committed
support access to named regex groups
1 parent fcc1417 commit 0726909

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

graalpython/lib-graalpython/_sre.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,35 +58,50 @@ def TREGEX_ENGINE(*args): raise e
5858
class SRE_Match():
5959
def __init__(self, pattern, pos, endpos, result):
6060
self.result = result
61+
self.compiled_regex = result.regex
6162
self.re = pattern
6263
self.pos = pos
6364
self.endpos = endpos
6465

6566
def end(self, groupnum=0):
6667
return self.result.end[groupnum]
6768

69+
def _groupidx(self, idx):
70+
if isinstance(idx, str):
71+
return self.compiled_regex.groups[idx]
72+
else:
73+
return idx
74+
6875
def group(self, *args):
6976
if not args:
7077
return self.result.input[self.result.start[0]:self.result.end[0]]
7178
elif len(args) == 1:
72-
return self.result.input[self.result.start[args[0]]:self.result.end[args[0]]]
79+
idxarg = self._groupidx(args[0])
80+
return self.result.input[self.result.start[idxarg]:self.result.end[idxarg]]
7381
else:
7482
lst = []
7583
for arg in args:
76-
lst.append(self.result.input[self.result.start[arg]:self.result.end[arg]])
84+
idxarg = self._groupidx(arg)
85+
lst.append(self.result.input[self.result.start[idxarg]:self.result.end[idxarg]])
7786
return tuple(lst)
7887

7988
def groups(self, default=None):
8089
lst = []
8190
for arg in range(1, self.result.groupCount):
82-
lst.append(self.result.input[self.result.start[arg]:self.result.end[arg]])
91+
idxarg = self._groupidx(arg)
92+
lst.append(self.result.input[self.result.start[idxarg]:self.result.end[idxarg]])
8393
return tuple(lst)
8494

95+
def groupdict(self, default=None):
96+
return self.compiled_regex.groups
97+
8598
def span(self, groupnum=0):
86-
return (self.result.start[groupnum], self.result.end[groupnum])
99+
idxarg = self._groupidx(groupnum)
100+
return (self.result.start[idxarg], self.result.end[idxarg])
87101

88102
def start(self, groupnum=0):
89-
return self.result.start[groupnum]
103+
idxarg = self._groupidx(groupnum)
104+
return self.result.start[idxarg]
90105

91106
@property
92107
def string(self):

0 commit comments

Comments
 (0)