import re

def expand(alg):
    
    def inv_move(m):
        return m if m.endswith('2') else m[:-1] if m.endswith("'") else m+"'"
    def inv(alg):
        return ' '.join(inv_move(m) for m in reversed(alg.split()))
    def foo(m):
        A, op, B = m.groups()
        return ' '.join([A, B, inv(A)] + ([inv(B)] if op == ',' else []))

    prev = None
    while alg != prev:
        prev, alg = alg, re.sub(r"\[\s*([^][,:]+)\s*([,:])\s*([^][,:]+)\s*]", foo, alg)
    return alg

print(expand("[R' D R,[U:L]]"))