Вот некоторая клейкая лента, которую я добавил, чтобы помочь вам пройти перечисленные случаи - эта проблема на самом деле довольно интересная. Вероятно, есть некоторые случаи, которые не будут корректными (например, Google выделит duck
, если вы ищете ducks
, это будет работать только для duck's
).
Без более общего набора руководящих принципов сложно написать регулярное выражение, которое будет охватывать каждый случай, но в зависимости от того, насколько близким он вам нужен, в конечном итоге решит, насколько сложным вам потребуется его сделать.
import re, string
def boldword(text,needle):
n = re.sub('[%s]s*' % re.escape(string.punctuation), '', needle)
patterns = map(re.escape, n.split(' '))
patterns.append(n.replace(' ', ''))
regex = re.compile(r"\b(%s)\b" % '|'.join(patterns), re.I)
match = re.match(regex, text.replace(' ',''))
if match:
return "<strong>%s</strong>" % text
return re.sub(regex, r'<strong>\1</strong>', text)
print boldword("www.theshow.com", "the show")
print boldword("my show (video)", "my show (video)")
print boldword("apple ipad", "apple's ipad")
print boldword("stack overflow", "stackoverflow")
выход
>> www.<strong>theshow</strong>.com
>> <strong>my</strong> <strong>show</strong> (<strong>video</strong>)
>> <strong>apple ipad</strong>
>> <strong>stack overflow</strong>