Для простого ввода, такого как "1,2"
, наиболее простым решением является разбиение на ","
.
Если ввод более сложный - возможно, он содержит пробелы или существует много возможных разделителей - вы можете написатьгенератор, который выдает целые числа:
>>> data = '18 ,15 ,18,15x,19,14,20,12,13,17'
>>> def interator(data):
... digits = []
... for c in data:
... if c.isdigit():
... digits.append(c)
... else:
... if digits:
... yield int(''.join(digits))
... del digits[:]
... if digits:
... yield int(''.join(digits))
...
>>> tuple(interator(data))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)
Как это часто бывает, есть однострочная строка itertools, которая делает то же самое:
>>> tuple(int(''.join(s)) for _, s in
... filter(lambda x: x[0], itertools.groupby(data, str.isdigit)))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)
Но регулярное выражение будет кратким и для чтения:
>>> tuple(int(x.group(0)) for x in re.finditer(r'\d+', data))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)