В качестве альтернативы регуляркам можешь воспользоваться функцией
replace()text.replace(" безп", " бесп")
В любом случае тебе придется иметь набор правил. Конечно их можно сократить например:
gluhie = ["с", "п", "к", "т"] #ну и все глухие согласные
for g in gluhie:
text.replace(" без"+g, " бес"+g)
Развивая дальше можно хранить пары на замену в словаре (кстати, а почему не пошла идея?) и вставить в код выше:
prefixes = {'без': 'бес', 'раз': 'рас'} #и так все пары на замену
consonants = {'з': 'с', 'б': 'п', 'г': 'к', 'д': 'т'} #и остальные пары глухих и звонких согласных
for p in prefixes.keys():
for c in consonants.keys(): #обыгрываются оба случая, как
text.replace(' '+p+consonants[c], ' '+prefixes[p]+consonants[c]) # замена "без" в "безспорный" так и
text.replace(' '+prefixes[p]+c, ' '+p+с) # замена "бес" в "бесзаконие"
Но даже тут ньюансов хватает. Начиная что слово может быть с заглавной буквы, продолжая другими ошибками в тексте (например, “росстроенный”), и заканчивая тем, что это обработка лишь одного правила русского языка на приставки перед звонкими и глухими согласными. А этих правил… Но пока только такая мысля посетила

Удачи