Django:autoslug - >定制的slu ..

时间:2010-08-01 15:07:51

标签: python regex django slug

我有一个问题。我正在尝试创建一个自定义的slugify功能。我使用django.autoslug。由于autoslug文档,我能够创建一个自定义的slugifier,但它需要改进,我不知道如何实现。

所以我有一个字符串(书名),即.NET Framework 4.0 with C# & VB in VisualStudio 2010。我想对它进行重击,使它看起来像这样:dotnet-framework-4point0-with-cshapr-and-vb-in-visualstudio-2010

我目前的功能如下:

def custom_slug(value, *args, **kwargs):
    associations_dict = {'#':'sharp', '.':'dot', '&':'and'}
    for searcg_char in associations_dict.keys():
       if search_char in value:
          value = value.replace(search_char, associations_dict[search_char])
    return def_slugify(value)

如您所见,我的功能会将所有点.替换为'dot'。所以我的字符串将更改为dotnet-framework-4dot0-with-csharp-and-vb-in-visualstudio-2010

我建议,我应该使用RegEx,但我不知道如何做到这一点以及如何用右'dot / point-replacement'替换匹配的字符串

想法?!

P.S。对不起英文不好

1 个答案:

答案 0 :(得分:0)

import re
point = re.compile( r"(?<=\d)\.(?=\d)" )
point.sub( value, "point" )

更改应为.的{​​{1}},然后执行"point"更改其他内容。

解释

str.replace匹配夹在两位数字之间的point

.是(正面的)lookaround。这意味着“匹配(?<=spam)ham(?=eggs),只要它前面有ham,后跟spam”。换句话说,它告诉正则表达式引擎“环顾”它匹配的模式。