Ot, taki znak, że nie umar­łem. Dziś w pro­gra­mie dość popu­larny błąd składu, choć wielu uważa, że inter­netu reguły nie doty­czą. A sie­rotki wykoń­czymy tak:

import re

def sierotki(text):
    reg = re.compile(u'\b(a|i|o|u|w|z)\b\s+')
    return reg.sub(u'\1u00a0', text)

Nie­stety, na ogół mamy do czy­nie­nia z tek­stem zawie­ra­ją­cym znaczniki:

import re
from BeautifulSoup import BeautifulSoup

def sierotki(text):
    soup = BeautifulSoup(text)
    reg = re.compile(u'\b(a|i|o|u|w|z)\b\s+')
    for val in soup.findAll(text=reg):
        val.replaceWith(reg.sub(u'\1u00a0', val))
    return unicode(soup)

I na koniec bonus, blok dla Django:

from django import template
register = template.Library()

@register.tag(name='sierotki')
def do_sierotki(parser, token):
    nodelist = parser.parse(('endsierotki',))
    parser.delete_first_token()
    return SierotkiNode(nodelist)

class SierotkiNode(template.Node):
    def __init__(self, nodelist):
        self.nodelist = nodelist
    def render(self, context):
        output = self.nodelist.render(context)
        return sierotki(output)