diff --git a/src/codewars/RegExParser.py b/src/codewars/RegExParser.py index 553fa00..2136571 100644 --- a/src/codewars/RegExParser.py +++ b/src/codewars/RegExParser.py @@ -52,6 +52,8 @@ class RegExParser: sequences = RegExParser.parse_sequences(self.pattern) + print(sequences) + return RegExParser.parse_regex(sequences) def is_valid(self): @@ -107,7 +109,10 @@ class RegExParser: return None elif depth == 0: group = "".join(buffer) - result.append(RegExParser.parse_sequences(group)) + next_sequence = RegExParser.parse_sequences(group) + if isinstance(next_sequence, str): + next_sequence = "(" + next_sequence + ")" + result.append(next_sequence) buffer = [] else: buffer.append(c) @@ -121,12 +126,11 @@ class RegExParser: return result if len(result) > 1 else result[0] @staticmethod - def parse_regex(sequences) -> RegExp | None: + def parse_regex(sequences) -> RegExp | list[RegExp] | None: if isinstance(sequences, str): if sequences.find("*") == 0: sequences = sequences[1:] - print(sequences) if sequences == "": return None @@ -188,19 +192,29 @@ class RegExParser: else: regex = RegExParser.parse_regex(current_sequence) if regex: - result.append(regex) + if isinstance(regex, list): + result.extend(regex) + else: + result.append(regex) else: regex = RegExParser.parse_regex(current_sequence) if regex: - result.append(regex) + if isinstance(regex, list): + result.extend(regex) + else: + result.append(regex) sequence_idx += 1 return Str(result) if len(result) > 1 else result[0] @staticmethod - def get_type(sequence) -> RegExp: - regex: RegExp + def get_type(sequence) -> RegExp | list[RegExp]: + regex: RegExp | list[RegExp] + if sequence.startswith("("): + sequence = sequence[1:] + if sequence.endswith(")"): + sequence = sequence[:-1] if len(sequence) > 1: string = [] @@ -227,7 +241,10 @@ class RegExParser: if __name__ == "__main__": - test_cases = ["((aa)|ab)*|a"] + test_cases = [ + "(a|b)*", + #'I%T8]dX9b=k;lm_e/4i\x0b-+pFPWq#~\\,"a5.n}(Hcs{uCz*yA`OKJwZ7V