В настоящее время я пишу программу, которая форматирует определенные слова в документе Rich Text, помещая RTF-теги вокруг них.
Поскольку в программе предусмотрены дополнительные правила форматирования, которые могут перекрываться (т. Е. Раскрасить фразу «пожалуйста, помогите мне» все в желтый и раскрасить «пожалуйста» в синий), программе сложно найти совпадения, которые уже были отформатированы по предыдущему правилу (т. е. «пожалуйста, помогите мне» , из предыдущего примера становится " \ cf1 , пожалуйста \ cf0 помогите мне ", что не будет соответствовать другому правилу.
Я обходил это, используя регулярные выражения и помещая выражение, которое соответствует любому тегу RTF после каждого символа в фразе (так как правила определены пользователем, и я не знаю конкретной точки перекрытия), как это :
line = Regex.Replace(line, @"\bP(?:\\[^ ]* )*l(?:\\[^ ]* )*e(?:\\[^ ]* )*a(?:\\[^ ]* )*s(?:\\[^ ]* )*e(?:\\[^ ]* )*", Evaluator);
Выражение '(?: \\ [^] *) *' в приведенной выше последовательности находит предыдущий символ независимо от каких-либо тегов после него, но выполнение этого с каждым правилом значительно замедляет код и требует от меня создания регулярного выражения для каждый; который может работать не так, как ожидалось, в зависимости от правила.
Эрр, извините за стену текста, я сейчас доберусь до сути. Кто-нибудь знает более эффективный способ найти слово с RTF-тегами внутри него в неизвестной точке?