Python代码根据标题创建链接

时间:2011-11-26 10:17:26

标签: python web-applications

有人可以发布一个python片段来创建一个基于标题的链接,比如stackoverflow(或wordpress)...

e.g。
title : Global across "Modules" ?
corresponding link : http://example.com/8277516/globals-across-modules


我不需要除字母或数字或' - '之外的任何字符。此外,我不需要输出字符串的开头或结尾字符为' - '

3 个答案:

答案 0 :(得分:2)

这个怎么样:

>>> import re
>>> s = 'Global across "Modules" ?'
>>> '-'.join(item.lower() for item in re.findall(r'\w+', s))
'global-across-modules'

这适用于Python 2;它只保留ASCII字母数字字符。在Python 3下,它还将保留Unicode字母数字,这可能不是你想要的。

答案 1 :(得分:1)

你可能不想重新发明轮子,所以,你可能想要使用Django的slugify过滤器。当然,您不需要使用Django来使用它,您可以尝试查看源代码并获得您想要的内容,这样您就不必安装整个Django软件包来完成这项工作

以下是您将获得的信息:

>>> from django.template.defaultfilters import slugify
>>> slugify("""Global across "Modules" ?""")
u'global-across-modules'
>>> 

请注意,slugs旨在用于Django中的URL,因此它们是URL安全的。

答案 2 :(得分:0)

我建议使用输入和输出以及后备字典。

>>> s = "Tür auf"
>>> repl = {'ü' : 'u', ' ': '-'}
>>> f = lambda i: repl.get(i, '-')
>>> "".join(map(f, s)).lower()
'tur-auf'

修改

错误;)因为T和r不在替换词典中。但我希望你明白这个主意。您可以获得包含所有字母的列表:

>>> [chr(i) for i in range(97, 123)]

现在你需要一个函数来检查字母或它的小写是否在列表中,如果是,则使用它,如果没有,用dict值替换它。