diff --git a/common/python/nomadcore/simple_parser.py b/common/python/nomadcore/simple_parser.py index 5e81cb116ca634e7e05775265b51fbd3dc855ad1..e7133b41f7dfe08acb28c4c088f51c31436aa6e5 100644 --- a/common/python/nomadcore/simple_parser.py +++ b/common/python/nomadcore/simple_parser.py @@ -636,25 +636,30 @@ class CompiledMatcher(object): result_dict = {} # If a separate transform function was defined in the matcher, call it - # and do nothing else. + # and ignore any named groups. if self.matcher.startReTransform is not None: self.matcher.startReTransform(parser.backend, m.groups()) else: - for k,v in sorted(m.groupdict().items()): if v is None: # a group may be optional (subexpression of ? or | in regex) continue k_converted, v_converted = self.addStrValue(parser.backend, k, v) result_dict[k_converted] = v_converted - if self.matcher.fixedStartValues: - for k,v in sorted(self.matcher.fixedStartValues.items()): - if k not in result_dict: - v_converted = self.addValue(parser.backend, k, v) - result_dict[k] = v_converted + + # Emit fixed start values + if self.matcher.fixedStartValues: + for k,v in sorted(self.matcher.fixedStartValues.items()): + if k not in result_dict: + v_converted = self.addValue(parser.backend, k, v) + result_dict[k] = v_converted + + # If the match needs to be forwarded, push the read line back into the + # file stream if self.matcher.forwardMatch: logger.debug("handleStartMatch of %s on (%s) pushing back line", self.matcher.desc(),line) parser.fIn.pushbackLine(line) + return result_dict def handleEndMatch(self, parser):