[英]Django __iregex Returns Empty Response
我有一个Article
模型,该模型吸收了用户的文章。 这些文章中可以包含#hashtags ,就像我们在twitter中一样。 我将这些标签转换为链接,用户可以单击链接以加载其中包含单击的标签的所有文章。
如果我将这些文章保存在“ Article
模型中:
1. 'For the love of learning: why do we give #Exam?'
2. 'Articles containing #Examination should not come up when exam is clicked'
3. 'This is just an #example post'
我尝试使用Django的__icontains
过滤器
def hash_tags(request, hash_tag):
hash_tag = '#' + hash_tag
articles = Articles.objects.filter(content__icontains=hash_tag)
articles = list(articles)
return HttpResponse(articles)
但是如果用户点击#exam
,则会返回三篇文章,而不是第一篇。
我可以在'#exam'上添加空间以使其成为'#exam',它可以正常工作,但我希望能够使用正则表达式来实现。
我努力了:
articles = Articles.objects.filter(content__iregex=r"\b{0}\b".format(hash_tag))
但我得到的答复是空的。
我如何正确执行此操作才能正常工作? 我在后端使用Django 1.6和MySQL。
我建议您删除第一个\\b
因为#
和空格之间没有单词boudary存在。 即,如果hash_tag
变量的值为#exam
,则r"\\b{0}\\b"
将生成正则表达式\\b#exam\\b
。 而且这与#exam
旁的#exam
不匹配,因为space和#
之间不存在单词边界,所以它将失败。 #
和空格是非单词字符。 \\b
在单词字符和非单词字符之间匹配。
content__iregex=r"{0}\b".format(hash_tag)
如有必要,添加不区分大小写的修饰符。
content__iregex=r"(?i){0}\b".format(hash_tag)
我终于能够做到这一点。
articles = Articles.objects.filter(content__iregex=r"^[^.]*{0}*[[:>:]]".format(hash_tag))
就是这样!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.