Вы хотите вставить пробел между каждым символом каждого матча. Используйте lambda x: " ".join(x.group())
в качестве замены:
import re
text = "126 2225xx009"
rx_alnum = r"\b(?:[a-z]+[0-9]+|[0-9]+[a-z]+)[a-z0-9]*\b"
rx_digits = r"\d+"
alphanumeric_text = re.sub(rx_alnum, lambda x: " ".join(x.group()), text)
print(alphanumeric_text) # => 126 2 2 2 5 x x 0 0 9
numeric_text = text = re.sub(rx_digits, lambda x: " ".join(x.group()), alphanumeric_text )
print(text) # => 1 2 6 2 2 2 5 x x 0 0 9
См. Python демо .
Небольшое примечание: "\b"
(в вашем коде) соответствует Backspace, а не слово границы. См. Выше, r"\b"
соответствует границе слова.
Вы можете объединить регулярные выражения в один шаблон:
rx = r"\b(?:[a-z]+[0-9]+|[0-9]+[a-z]+)[a-z0-9]*\b|\d+"
print(re.sub(rx, lambda x: " ".join(x.group()), text))
# => 1 2 6 2 2 2 5 x x 0 0 9
См. this Python demo .