如何在Python中从字符串创建SEO友好的短横线分隔的URL?

2 投票
3 回答
2701 浏览
提问于 2025-04-17 04:47

基本上,我的问题和这个是一样的,只不过我想用Python(和GAE),而不是C#。

需求:

  • 把每个单词用短横线连接起来,并去掉所有标点符号(要考虑到并不是所有单词都是用空格分开的)。
  • 这个函数需要接收一个最大长度,并返回所有小于这个最大长度的词。例如:ToSeoFriendly("hello world hello world", 14) 会返回 "hello-world"。
  • 所有单词都要转换成小写字母。

3 个回答

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

3

你要找的词是‘slugify’。

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()

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答