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)
|
||||
|
||||
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<j\n\x0cfG !L@\r2ghQr$)[ot3Rx&M'
|
||||
]
|
||||
|
||||
for test_case in test_cases:
|
||||
print("---------------------")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user