inputs = ['{a}text{b}test', 'text', 'text{b}text', 'text{b}', 'text{a}text']
p = re.compile('^(.*(?={a})|.*?)({a})?(.*(?={b})|.*)({b})?(.*?)$')
Регулярное выражение Python с необязательными, но жадными группами