删除特殊字符并将空格替换为“-”

时间:2019-11-20 16:33:20

标签: python django python-3.x django-models

我正在尝试建立一个可以出现在URL中的目录。我要确保它不包含任何特殊字符,并用连字符替换任何空格。

from os.path import join as osjoin
def image_dir(self, filename):
    categorydir = ''.join(e for e in  str(self.title.lower()) if e.isalnum())
    return "category/" + osjoin(categorydir, filename)

它正在删除特殊字符,但是我想使用.replace(" ", "-")来替换带连字符的空格

3 个答案:

答案 0 :(得分:2)

最好的方法可能是使用slugify函数,该函数接受任何字符串作为输入并返回与URL兼容的字符串,您的不是URL,但可以解决问题,例如:

>>> from django.utils.text import slugify
>>> slugify(' Joel is a slug ')
'joel-is-a-slug'

答案 1 :(得分:0)

为什么不使用quote功能?

import urllib.parse

urlllib.parse.quote(filename.replace(" ", "-"), safe="")

答案 2 :(得分:0)

您可以创建此函数并调用 remove_special_chars(s)来完成此操作:

def __is_ascii__(c):
    return (ord(c) < 128)


def remove_special_chars(s):
    output = ''

    for c in s:
        if (c.isalpha() and __is_ascii__(c)) or c == ' ':
            output = output + c
        else:
            if c in string.punctuation:
                output = output + ' '

    output = re.sub(' +', ' ', output)
    output = output.replace(' ', '-')

    return output

它将删除每个非ASCII字符和 string.punctuation

中的每个元素

编辑: 此函数将 string.punctuation 中的每个元素替换为'-',如果您愿意,可以在else语句中将''替换为',以合并字符串之前和之后的两部分。标点符号。