postgresql 我如何修改Django过滤器来使用正则表达式或其他选项搜索特定的单词和带有破折号的变体?

46scxncf  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(1)|浏览(109)

我有这个过滤器

filters = Q(my_text__icontains=typed_word)

我需要以这样的方式修改它:如果typed_word是“ABCD”,它应该返回任何ABCD,可以在单词中的任何位置有一个“-”(破折号),例如:将返回“ABCD”本身,但也返回“A-BCD”和“AB-CD”和“ABC-D”
顺便说一句,数据库中的任何单词都只有一个破折号,没有一个单词会有多个破折号
我尝试了一些模式使用类似这样的my_text__iregex=pattern但没有运气

flmtquvp

flmtquvp1#

使用replace()函数来删除破折号,而不是复杂的正则表达式。类似于:

select word, replace(word, '-', '') "word without dash"
  from words;

参见demo here。注意:如果你的语句 * 数据库只有一个破折号 * 必须被强制,那么你可能需要验证单词的长度只相差1个字符。以上内容将取代所有破折号。

相关问题