Хотя в этом случае вы можете использовать eval
, это, как правило, небезопасный способ работы с данным типом данных, особенно если строка, которую вы пытаетесь интерпретировать, отсутствует в вашем коде или введена вами.
Вот решение с регулярным выражением, как вы и просили:
import re
subject = '(707.027,949.189),(598.919,6.48649)'
match = re.search(r"\(([\d.]+),([\d.]+)\),\(([\d.]+),([\d.]+)\)", subject)
numbers = []
p1, p2 = tuple(), tuple()
if match:
numbers = [float(match.group(n)) for n in range(1, 5)]
# or
p1 = (float(match.group(1)), float(match.group(2)))
p2 = (float(match.group(3)), float(match.group(4)))
print(numbers, p1, p2)