Регулярное выражение для поиска пар значений

Как можно разбить строку на пары int|float значений? Пример строки:

1.2*1.0,2*0,0x1,1*3*5,4x2x4

На выходе хочу получить:

[
 [1.2,1.0],
 [2,0],
 [0,1],
 [1,3,5],
 [4,2,4],
]

Через 2 регекса получилось сделать (сначала бить по запятым, потом в цикле по * или x, а как сделать одним ?


Ответы (1 шт):

Автор решения: GrAnd

Без цикла - никак. Да и зачем, и так сам разбор в одну строчку делается.

import re
s = "1.2*1.0,2*0,0x1,1*3*5,4x2x4"
lst = [re.split(r"[*x]", x) for x in s.split(",")]

Все числа приведены к float:

lst = [list(map(float, re.split(r"[*x]", x))) for x in s.split(",")]

Или если нужны именно числа конкретного типа:

lst = [list(map(lambda i: float(i) if "." in i else int(i), re.split(r"[*x]", x))) for x in s.split(",")]
→ Ссылка