2011-08-21 30 views
0

我目前正在編寫一個程序,它通過在RTF標籤周圍放置RTF標籤來格式化某些單詞。 尋找一個可能有一個RTF標記的特定單詞

作爲該計劃允許,可以重疊的其他格式的規則(即着色短語「請幫幫我」所有黃色和着色「請」藍色),該方案具有難以找到匹配的是已經格式化由以前的規則(即「請幫幫我」,從前面的例子變成\ CF1\ CF0幫我」,這將不匹配其他規則。

我一直在使用正則表達式來解決這個問題,並且在短語中的每個字符之後放置一個匹配任何RTF標籤的表達式(因爲規則是由用戶定義的,而且我不知道重疊的具體點),像這樣:

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

的「(?:\\ [^] *)*」在上述序列中表達無論任何標籤的後發現前面的字符,但與每個規則這樣做急劇減慢代碼並要求我爲每個代碼生成一個正則表達式;根據規則,這可能無法按預期工作。

呃,對不起牆上的文字,我現在就到了。有沒有人知道一個更有效的方式來找到一個在其中有一個RTF標籤在一個未知點的單詞?

回答

0

一種可能性是永遠不允許重疊相似的標籤 - 如果您需要開始以紅色格式化文本,但它已經被格式化爲藍色,請在啓動紅色標籤之前關閉藍色標籤。否則,我會想象格式規則可能會變得很模糊。

編輯

如果你絕對需要有重疊,然後創建格式化的堆棧。如上所述,結束舊標籤,但將其保存到堆棧。啓動新標籤,當新標籤完成時,如果舊格式未關閉(並且仍在堆棧中),請重新啓動舊格式。無論何時關閉標籤,都會將其從堆棧中移除。

+0

嗯,你的堆棧的想法聽起來很完美。謝謝! – Glen

相關問題