7 if not expression
or str(expression).
strip() ==
"":
8 raise ValueError(
"No region expression provided.")
11 if isinstance(expression, (list, tuple)):
12 result = [int(x)
for x
in expression
if min_value <= int(x) <= max_value]
14 raise ValueError(
"No valid regions after filtering by range.")
18 if isinstance(expression, str):
19 expression_stripped = expression.strip()
20 if expression_stripped.startswith(
'[')
and expression_stripped.endswith(
']'):
23 list_content = expression_stripped[1:-1].
strip()
25 values = [int(x.strip())
for x
in list_content.split(
',')]
26 if all(min_value <= x <= max_value
for x
in values):
29 out_of_range = [x
for x
in values
if x < min_value
or x > max_value]
30 raise ValueError(f
"Values out of range [{min_value}-{max_value}]: {out_of_range}")
32 raise ValueError(
"Empty list provided.")
34 raise ValueError(f
"Invalid list format: {expression}")
37 if str(expression).isdigit():
39 if min_value <= num <= max_value:
42 raise ValueError(f
"Invalid choise: {expression}. Number out of range [{min_value}-{max_value}].")
45 numbers =
set(range(min_value, max_value + 1))
50 print(f
"Initial expression: {str(expression)}")
51 if isinstance(expression, tuple)
or isinstance(expression, list):
52 expression =
",".join(
map(str, expression))
55 if expression.strip() ==
"*":
56 return list(range(min_value, max_value + 1))
58 parts = expression.split(
",")
59 print(f
"Parts after split: {parts}")
65 if part.startswith(
"!"):
71 result = include_set
if include_set
else numbers
75 result = {num
for num
in result
if min_value <= num <= max_value}
78 raise ValueError(f
"No valid regions after applying expression: {expression}")
80 return list(sorted(result))
84 if "-" in expr
and "*" not in expr:
85 start, end =
map(int, expr.split(
"-"))
86 start, end =
max(min_value, start),
min(max_value, end)
87 return set(range(start, end + 1))
92 return {num}
if min_value <= num <= max_value
else set()
95 etanum = int(expr.replace(
"eta",
""))
100 pattern =
"^" + expr.replace(
"*",
".*") +
"$"
101 regex = re.compile(pattern)
103 return {num
for num
in range(min_value, max_value + 1)
if regex.match(str(num))}
110 (
"!5-10", list(range(0, 5)) + list(range(11, 1280))),
114 (
"!5", list(range(0, 5)) + list(range(6, 1280))),