def _validate_pattern(self): try: verify_regex(self.regex, self.line_text) except NotMatchingRegexError: return [NotMatchingPatternProblem()] else: return []
def update_by_regex(self, new_regex): """ Assigns self.regex to new_regex. Throws NotMatchingRegexError if new_regex doesn't match self.line_text If needed, improves new_regex: new_regex = '^' + new_regex + '$' (regex must match whole line) Updates self.param_groups so that they correspond to new_regex groups """ if new_regex[-1] != '$': new_regex += '$' try: verify_regex(new_regex, self.line_text) except NotMatchingRegexError: self.param_groups = {} self.primary_key = [] else: groups = regex_groups(new_regex, self.line_text) default_converter = ConverterType.TO_STRING self.param_groups = dict( (key + 1, ParamGroup(groups[key], default_converter)) for key in six.moves.range(len(groups)) ) finally: self.regex = new_regex
def _groups_from_spans(spans, regex, text): verify_regex(regex, text) matcher = re.match(regex, text) group_contents = matcher.groups() sorted_spans = spans.sort_by_start_and_end() group_converters = [span.converter for span in sorted_spans] groups = [ ParamGroup(content, converter) for content, converter in six.moves.zip(group_contents, group_converters) ] groups_dict = dict((key + 1, groups[key]) for key in six.moves.range(len(groups))) return groups_dict
def _groups_from_spans(spans, regex, text): verify_regex(regex, text) matcher = re.match(regex, text) group_contents = matcher.groups() sorted_spans = spans.sort_by_start_and_end() group_converters = [span.converter for span in sorted_spans] groups = [ ParamGroup(content, converter) for content, converter in six.moves.zip( group_contents, group_converters) ] groups_dict = dict( (key + 1, groups[key]) for key in six.moves.range(len(groups))) return groups_dict