查找可能包含RTF标记的特定单词

本文关键字:单词 包含 RTF 查找 | 更新日期: 2023-09-27 18:06:09

我目前正在编写一个程序,通过在富文本文档中放置RTF标签来格式化某些单词。

由于该程序允许重叠的其他格式规则(即将短语"please help me">全部涂成黄色,将的"please">涂成蓝色(,程序很难找到已经由以前的规则格式化的匹配项(即"please help me">,从以前的例子变成">''cf1please''cof0help me">(,这将与其他规则不匹配。

我一直在通过使用正则表达式来解决这个问题,并在短语中的每个字符后面放置一个匹配任何RTF标记的表达式(因为规则是由用户定义的,我不知道具体的重叠点(,如下所示:

line = Regex.Replace(line, @"'bP(?:''[^ ]* )*l(?:''[^ ]* )*e(?:''[^ ]* )*a(?:''[^ ]*   )*s(?:''[^ ]* )*e(?:''[^ ]* )*", Evaluator);

上面序列中的"(?:''''[^]*(*"表达式会查找前面的字符,而不管后面有什么标记,但使用每条规则都会大大降低代码的速度,并要求我为每条规则生成一个正则表达式;这取决于规则可能不能如预期的那样工作。

呃,对不起,我现在就开门见山了。有人知道在未知点找到包含RTF标签的单词的更有效方法吗?

查找可能包含RTF标记的特定单词

一种可能性是永远不允许类似标签重叠-如果您需要开始用红色格式化文本,但它已经被格式化为蓝色,请在开始红色标签之前关闭蓝色标签。否则,我会认为格式规则可能会变得非常模糊。

编辑

如果您绝对需要重叠,那么创建一个格式堆栈。如上所述结束旧标签,但将其保存到堆栈中。启动新标记,完成新标记后,如果旧格式未关闭(仍在堆栈中(,则重新启动旧格式。每当关闭标记时,都会将其从堆栈中移除。