如何在Python中从字符串创建SEO友好的短横线分隔的URL?
基本上,我的问题和这个是一样的,只不过我想用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()
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。