使用SilverLight在RichTextBox上使用RegEx突出显示单词

时间:2011-11-16 13:37:59

标签: regex parsing silverlight-4.0 richtextbox

我试图突出显示正则表达式中标记的单词,字母或任何内容。 我在Silverlight中使用RichTextBox(注意Silverlight没有使用与其他应用程序相同的.NET Framework,例如它不是TextRange)

每次文本都有\ r \ n或\ n \ r时,指针向前移动4个位置。但真正糟糕的是,当我做突出显示时,样式文本增加了4个位置。即便如此,我认为他的行为比种族更不稳定。请告诉我一些事情!

感谢FailDev。

我试用的文字是:

ffffffffffafffffffffff fffffafffffffffff fffffffffffffafffffffff

(4行,最后一个f后有载波返回\换行)

这个也不能用我的代码(有不稳定的行为,或不是):

ffffffffffaaffffffafffff fffffafffffffffff fffffffffffffafffffffff

(4行,最后一个f后有载波返回\换行)

这个想法用蓝色突出显示,加粗并加上“a”字符。

我尝试的最后一个代码是:

MatchCollection CarrierReturns =  MainGeneral.Build_Regex(@"[\r\n|\n\r]", false);

            MatchCollection WordsFound =  MainGeneral.Build_Regex("[a]", false);
            foreach (Match x in WordsFound) {
                int StringCarrierCount = 0;

                if (CarrierReturns.Count > 0)
                {
                    foreach (Match CR in CarrierReturns)
                    {
                        if (x.Index > CR.Index)
                        {
                            textBox1.Text += " CI:" + StringCarrierCount + "- ";
                            break;
                        }
                        StringCarrierCount++;
                    }
                }

                if (x.Index < CarrierReturns[0].Index) { StringCarrierCount = 0; }

                StringBegin = 2 + x.Index + (4 * StringColorCounter) + (4 *  StringCarrierCount);
                StringEnd = StringBegin + x.Length;
                textBox1.Text += StringBegin + "-" + StringEnd + " ";
                StringColorCounter++;

                StartPoint = MainData.ContentStart.GetPositionAtOffset(StringBegin, LogicalDirection.Forward);
                EndPoint = MainData.ContentStart.GetPositionAtOffset(StringEnd, LogicalDirection.Forward);
                MainData.Selection.Select(StartPoint, EndPoint);
                MainData.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Blue));
                MainData.Selection.ApplyPropertyValue(Run.TextDecorationsProperty, TextDecorations.Underline);
                MainData.Selection.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
            }

提前致谢,请先评价我好评! :)

1 个答案:

答案 0 :(得分:1)

行分隔符可以是\r\n(回车+换行符),\n(仅换行)或\r(仅回车)中的任何一个。匹配一个的正确方法是\r\n|[\r\n]

你的正则表达式 - [\r\n|\n\r] - 只匹配一个字符; \r\n|中的任何一个。这意味着,只要行分隔符为\r\n,您的代码就像两个行分隔符,而不是一个。

您的代码中可能还有其他错误,但我真的不明白它正在尝试做什么。我确定正则表达式是不正确的。