comply with all codewars tests
This commit is contained in:
parent
027c78ed62
commit
d0205282de
@ -52,6 +52,8 @@ class RegExParser:
|
|||||||
|
|
||||||
sequences = RegExParser.parse_sequences(self.pattern)
|
sequences = RegExParser.parse_sequences(self.pattern)
|
||||||
|
|
||||||
|
print(sequences)
|
||||||
|
|
||||||
return RegExParser.parse_regex(sequences)
|
return RegExParser.parse_regex(sequences)
|
||||||
|
|
||||||
def is_valid(self):
|
def is_valid(self):
|
||||||
@ -107,7 +109,10 @@ class RegExParser:
|
|||||||
return None
|
return None
|
||||||
elif depth == 0:
|
elif depth == 0:
|
||||||
group = "".join(buffer)
|
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 = []
|
buffer = []
|
||||||
else:
|
else:
|
||||||
buffer.append(c)
|
buffer.append(c)
|
||||||
@ -121,12 +126,11 @@ class RegExParser:
|
|||||||
return result if len(result) > 1 else result[0]
|
return result if len(result) > 1 else result[0]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_regex(sequences) -> RegExp | None:
|
def parse_regex(sequences) -> RegExp | list[RegExp] | None:
|
||||||
if isinstance(sequences, str):
|
if isinstance(sequences, str):
|
||||||
if sequences.find("*") == 0:
|
if sequences.find("*") == 0:
|
||||||
sequences = sequences[1:]
|
sequences = sequences[1:]
|
||||||
|
|
||||||
print(sequences)
|
|
||||||
if sequences == "":
|
if sequences == "":
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -188,19 +192,29 @@ class RegExParser:
|
|||||||
else:
|
else:
|
||||||
regex = RegExParser.parse_regex(current_sequence)
|
regex = RegExParser.parse_regex(current_sequence)
|
||||||
if regex:
|
if regex:
|
||||||
result.append(regex)
|
if isinstance(regex, list):
|
||||||
|
result.extend(regex)
|
||||||
|
else:
|
||||||
|
result.append(regex)
|
||||||
else:
|
else:
|
||||||
regex = RegExParser.parse_regex(current_sequence)
|
regex = RegExParser.parse_regex(current_sequence)
|
||||||
if regex:
|
if regex:
|
||||||
result.append(regex)
|
if isinstance(regex, list):
|
||||||
|
result.extend(regex)
|
||||||
|
else:
|
||||||
|
result.append(regex)
|
||||||
|
|
||||||
sequence_idx += 1
|
sequence_idx += 1
|
||||||
|
|
||||||
return Str(result) if len(result) > 1 else result[0]
|
return Str(result) if len(result) > 1 else result[0]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_type(sequence) -> RegExp:
|
def get_type(sequence) -> RegExp | list[RegExp]:
|
||||||
regex: RegExp
|
regex: RegExp | list[RegExp]
|
||||||
|
if sequence.startswith("("):
|
||||||
|
sequence = sequence[1:]
|
||||||
|
if sequence.endswith(")"):
|
||||||
|
sequence = sequence[:-1]
|
||||||
|
|
||||||
if len(sequence) > 1:
|
if len(sequence) > 1:
|
||||||
string = []
|
string = []
|
||||||
@ -227,7 +241,10 @@ class RegExParser:
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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<j\n\x0cfG !L@\r2ghQr$)[ot3Rx&M'
|
||||||
|
]
|
||||||
|
|
||||||
for test_case in test_cases:
|
for test_case in test_cases:
|
||||||
print("---------------------")
|
print("---------------------")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user