def boldword(text, needle):
    return mark_safe(re.compile(r"\b(%s)\b" % "|".join(map(re.escape, needle.split(' '))), re.I).sub(r'<strong>\1</strong>', text))


当前,这是我的功能,用于在给定针的情况下加粗字符串文本。 (就像Google ...一样,当您进行搜索时,它们会为您的文字加粗)。


当针是“表演”时,它不会突出显示“ www.theshow.com”。
当针是“我的节目(视频)”时,它不会突出显示“我的节目(视频)” ...而只会突出显示我的节目。
当针是“ apple's ipad”时,它不会突出显示“ apple ipad” ...而只会突出显示ipad。

预期产量:
    www.theshow.com
,电流输出:
    www.theshow.com

预期产量:
    我的节目(视频)
,电流输出:
    我的节目(视频)

预期:
    苹果ipad
,当前:
    苹果ipad


我认为主要的问题是在分割空格与其他标点符号时。对?
有人可以修改我当前的功能以考虑这些因素吗?

谢谢

最佳答案

您最大的问题似乎是边界一词。如果您要搜索的令牌可以以非单词字符开头或结尾(例如(video)),则将正则表达式包含在\b中会阻止匹配。它们还防止匹配两个或多个连续令牌(例如,theshow中的www.theshow.com)。但是,建议您不要忽略单词边界,而建议您忽略搜索表达式中的标点符号并构造正则表达式,以便一次匹配一个或多个标记:

re.compile(r"\b((?:%s)+)\b" % "|".join(re.split(r"\W+", needle)), re.I)


/\W+/上拆分会删除所有标点符号和空格,因此无需转义任何内容。我的结果似乎与您想要的结果匹配,除了(video)中的括号未突出显示,仅单词video被突出显示。如果搜索表达式为"the show",则在theshow中突出显示www.theshow.com,但在www.footheshowbar.com中不突出显示。

10-04 21:43