If I want to take
\"hi, my name is foo bar\"
and split it on \"foo\"
, and have that split be case insensitive (split on any of
You can use the re.split function with the re.IGNORECASE flag (or re.I
for short):
>>> import re
>>> test = "hI MY NAME iS FoO bar"
>>> re.split("foo", test, flags=re.IGNORECASE)
['hI MY NAME iS ', ' bar']
>>>
You can also search for something and get the startposition of the keyword. I would recommend that and cut it with "substring" method out. (I am from C# so i dont know whats the method in this language)
This is not the exact answer but the solution based on the question. After searching awhile on the net I implemented the following.
This is my custom tag (see how to do it).
from django.template.defaultfilters import register
from django.utils.html import escape
from django.utils.safestring import mark_safe
@register.simple_tag
def highlight(string, entry, prefix, suffix):
string = escape(string)
entry = escape(entry)
string_upper = string.upper()
entry_upper = entry.upper()
result = ''
length = len(entry)
start = 0
pos = string_upper.find(entry_upper, start)
while pos >= 0:
result += string[start:pos]
start = pos + length
result += prefix + string[pos:start] + suffix
pos = string_upper.find(entry_upper, start)
result += string[start:len(string)]
return mark_safe(result)
It accepts unsafe string and returns the escaped result.
Use it this way:
<span class="entityCode">{% highlight entity.code search_text '<span class="highlighted">' '</span>' %}</span>
I use a nested <span>
to inherit all the style. And it shows something like