Существует пакет python с именем python-slugify, который довольно хорошо справляется с заменой:
pip install python-slugify
Работает так:
from slugify import slugify
txt = "This is a test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")
txt = "This -- is a ## test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")
txt = 'C\'est déjà l\'été.'
r = slugify(txt)
self.assertEquals(r, "cest-deja-lete")
txt = 'Nín hǎo. Wǒ shì zhōng guó rén'
r = slugify(txt)
self.assertEquals(r, "nin-hao-wo-shi-zhong-guo-ren")
txt = 'Компьютер'
r = slugify(txt)
self.assertEquals(r, "kompiuter")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt)
self.assertEquals(r, "jaja-lol-mememeoo-a")
Посмотреть больше примеров
Этот пакет делает немного больше, чем то, что вы опубликовали (взгляните на исходный код, это всего лишь один файл). Проект все еще активен (обновлен за 2 дня до моего первоначального ответа, более семи лет спустя (последний раз проверено 30 июня 2020 г.), он все еще обновляется).
осторожно : есть второй пакет с именем slugify. Если у вас есть оба из них, вы можете столкнуться с проблемой, поскольку они имеют одинаковое имя для импорта. Тот, что только что назван slugify, не сделал все, что я проверил: "Ich heiße"стал "ich-heie"(должен быть "ich-heisse"), поэтому обязательно выберите правильный при использовании pipили easy_install.