37 lines
950 B
Python
37 lines
950 B
Python
#!/bin/python
|
|
import re
|
|
|
|
def parse_values(raw_input):
|
|
values = []
|
|
tokens = raw_input.replace(',', ' ').split()
|
|
|
|
for token in tokens:
|
|
match = re.fullmatch(r'([0-9]*\.?[0-9]+)\s*([KM]?)', token)
|
|
if not match:
|
|
raise ValueError(f"Invalid component value '{token}'")
|
|
|
|
number = float(match.group(1))
|
|
if number <= 0:
|
|
raise ValueError(f"Invalid component value '{token}' (must be positive)")
|
|
|
|
suffix = match.group(2)
|
|
match suffix:
|
|
case "n":
|
|
multiplier = 1e-9
|
|
case "u" | "µ":
|
|
multiplier = 1e-6
|
|
case "m":
|
|
multiplier = 1e-3
|
|
case "k":
|
|
multiplier = 1e3
|
|
case "M":
|
|
multiplier = 1e6
|
|
case "G":
|
|
multiplier = 1e3
|
|
case _:
|
|
1.0
|
|
|
|
values.append(number * multiplier)
|
|
|
|
return values
|