Если в скобках может быть только до 6 аргументов, используйте шесть (?:,(?P<argX>{num}))?
необязательных групп (где X
- это di git от 1 до 6), чтобы сопоставить от 1 до 6 шаблонов, соответствующих аргументам, и затем отбросьте все элементы группового приговора, которые имеют None
значение:
import re
t = "translate(44,22) rotate(55,6,7) scale(2)"
num = "[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
types = "matrix|translate|rotate|scale|skewX|skewY"
regex = f"({types})\((?P<arg1>{num})(?:,(?P<arg2>{num}))?(?:,(?P<arg3>{num}))?(?:,(?P<arg4>{num}))?(?:,(?P<arg5>{num}))?(?:,(?P<arg6>{num}))?\)" # <- 'i' as an increasing number
for match in re.finditer(regex, t):
print({k:v for k,v in match.groupdict().items() if v is not None})
См. Python демо , уступающее
{'arg1': '44', 'arg2': '22'}
{'arg1': '55', 'arg2': '6', 'arg3': '7'}
{'arg1': '2'}