Вы можете использовать регулярное выражение для перевода вашего pattern
в правильный шаблон регулярного выражения с именованными группами захвата, например, '(?P<var1>.*?),(?P<var2>.*?)::(?P<var3>.*?)-:(?P<var4>.*?)'
, а затем использовать это регулярное выражение, чтобы получить словарь, содержащий "переменные":
>>> import re
>>> pattern = '{var1},{var2}::{var3}-:{var4}'
>>> string_text = 'test1,test2::test3-:test4'
>>> p = re.sub("\{(.*?)\}", r"(?P<\1>.*?)", pattern)
>>> m = re.match("^" + p + "$", string_text)
>>> m.groupdict()
{'var1': 'test1', 'var2': 'test2', 'var3': 'test3', 'var4': 'test4'}
Обратите внимание, что ваш pattern
уже содержит некоторые управляющие символы regex. Это, похоже, не является проблемой, но вам лучше сначала re.escape
pattern
, а затем выполнить re.sub
на экранированном шаблоне: p = re.sub(r"\\{(.*?)\\}", r"(?P<\1>.*?)", re.escape(pattern))