pattern = re.compile('(\\d+)\\s*[xX\\*]\\s*(?=\\d)')
pattern.sub('\\1 xby ', '2x4x12')
"""2 xby 4 xby 12"""
Как заменить все вхождения регулярного выражения, как если бы неоднократно применялась замена