Итак, я пытаюсь заменить строку «ключевое слово» на
"<b>keyword</b>"
в большей строке.
Пример:
myString = "HI там. Вы должны выше этого человека для работы. Привет привет."
keyword = "hi"
результат, который я хотел бы получить:
result = "<b>HI</b> there. You should higher that person for the job.
<b>Hi</b> <b>hi</b>."
Я не буду знать, что такое ключевое слово, пока пользователь не введет ключевое слово
и не будет знать корпус (myString), пока не будет выполнен запрос.
Я нашел решение, которое работает большую часть времени, но имеет некоторые ложные срабатывания,
namely it would return "<b>hi<b/>gher"
это не то, что я хочу. Также обратите внимание, что я
Я пытаюсь сохранить регистр исходного текста, и соответствие должно занять
место независимо от случая. поэтому, если ключевое слово "привет", оно должно заменить
HI with <b>HI</b> and hi with <b>hi</b>.
Самое близкое, что я пришел, - это использование слегка производной версии этого:
http://code.activestate.com/recipes/576715/
но я все еще не мог понять, как сделать второй проход строки, чтобы исправить все ложные срабатывания, упомянутые выше.
Или с помощью WordPunctTokenizer NLTK (который упрощает некоторые вещи, такие как пунктуация)
но я не уверен, как бы я собрал предложения, учитывая, что это не
есть обратная функция, и я хочу сохранить первоначальную пунктуацию myString. Существенно, выполнение конкатенации всех токенов не возвращает оригинал
строка. Например, я не хотел бы заменять «7-7» на «7-7» при перегруппировке токенов в исходный текст, если исходный текст содержал «7-7».
Надеюсь, это было достаточно ясно. Кажется, простая проблема, но это оказалось немного сложнее, чем я думал.