如何从PYTHON中的字符串创建一个SEO友好的划线分隔的URL?

时间:2011-10-21 22:03:55

标签: python url

基本上,我的问题与this相同,但在Python(和GAE)中,而不是C#。

要求:

  • 用短划线分隔每个单词并删除所有标点符号(考虑到并非所有单词都用空格分隔。)
  • 函数占用最大长度,并获得低于该最大长度的所有标记。示例:ToSeoFriendly(“hello world hello world”,14)返回“hello-world”
  • 所有单词都转换为小写。

3 个答案:

答案 0 :(得分:5)

def ToSeoFriendly(s, maxlen):
    '''Join with dashes, eliminate punction, clip to maxlen, lowercase.

        >>> ToSeoFriendly("The quick. brown4 fox jumped", 14)
        'the-quick-brow'

    '''
    t = '-'.join(s.split())                                # join words with dashes
    u = ''.join([c for c in t if c.isalnum() or c=='-'])   # remove punctation   
    return u[:maxlen].rstrip('-').lower()                  # clip to maxlen

if __name__ == '__main__':
    import doctest
    print doctest.testmod()

答案 1 :(得分:3)

您要搜索的字词为“slugify”。

答案 2 :(得分:3)

作为替代(可能是更多测试版本),我建议你使用Django的(最小修改)slugify代码:

import unicodedata
import re

def slugify(value):
    """
    Normalizes string, converts to lowercase, removes non-alpha characters,
    and converts spaces to hyphens.
    """
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
    value = re.sub('[^\w\s-]', '', value).strip().lower()
    return re.sub('[-\s]+', '-', value)

请参阅:https://github.com/django/django/blob/master/django/utils/text.py#L435