Parse a comma separated list of numbers or ranges and return a list of ints. Example: '1,2,5-10' returns [1, 2, 5, 6, 7]
(s: Union[str, List[int]])
| 230 | #---------------------------------------------------------------------------- |
| 231 | |
| 232 | def parse_range(s: Union[str, List[int]]) -> List[int]: |
| 233 | '''Parse a comma separated list of numbers or ranges and return a list of ints. |
| 234 | |
| 235 | Example: '1,2,5-10' returns [1, 2, 5, 6, 7] |
| 236 | ''' |
| 237 | if isinstance(s, list): return s |
| 238 | ranges = [] |
| 239 | range_re = re.compile(r'^(\d+)-(\d+)$') |
| 240 | for p in s.split(','): |
| 241 | m = range_re.match(p) |
| 242 | if m: |
| 243 | ranges.extend(range(int(m.group(1)), int(m.group(2))+1)) |
| 244 | else: |
| 245 | ranges.append(int(p)) |
| 246 | return ranges |
| 247 | |
| 248 | #---------------------------------------------------------------------------- |
| 249 |