如何指示python'filter'忽略标点符号?

时间:2017-09-29 06:51:46

标签: python list string-comparison

我正在尝试为一段python编写一个小补丁,根据对象列表检查提供的字符串,如果对象标题字段与提供的字符串匹配,则返回匹配的字符串。

代码使用filter函数执行此操作,并传递一个简单的测试用于查找匹配项。

我想改变过滤器测试,现在忽略标点符号。

我从这个原始代码开始:

    res = (self._db_list(session).movies.filter(func.lower(MovieListMovie.title) == name.lower())
           .filter(MovieListMovie.year == year).first())
    if res:
        log.debug('found movie %s', res)
    return res

基本上,它使用提供的'name'和'year'字符串,并查看'movies'列表中的任何'movie'对象是否具有匹配的title和year属性。如果是这样,它会返回它。

并尝试将其修改为:

    nameWithoutPunctuation = name.translate(None,string.punctuation)
    res = (self._db_list(session).movies.filter(func.lower(MovieListMovie.title).translate(None, string.punctuation) == nameWithoutPunctuation.lower())
           .filter(MovieListMovie.year == year).first())
    if res:
        log.debug('found movie %s', res)
    return res

但我收到一个错误,翻译只接受一个变量,表明我使用不正确。

这是告诉'过滤器'我想忽略标点符号的正确方法吗?我宁愿不尝试拆开“电影”对象,也不要开始摆弄低级功能,因为它们也可以提供其他功能。

0 个答案:

没有答案