Regex 使用SilverLight在RichTextBox上使用正则表达式突出显示单词

Regex 使用SilverLight在RichTextBox上使用正则表达式突出显示单词,regex,parsing,silverlight-4.0,richtextbox,Regex,Parsing,Silverlight 4.0,Richtextbox,我试图突出显示单词、字母或任何用正则表达式标记的东西。 我在Silverlight中使用RichTextBox(注意Silverlight没有使用与其他应用相同的.NET Framework,例如它没有TextRange) 每次文本有一个或\r\n\r指针向前移动4个位置。但真正糟糕的是,当我高亮显示时,样式文本又增加了4个位置。甚至,我认为他比种族主义者更不稳定。请在这方面给我一些建议 谢谢你,德夫 我用于尝试此操作的文本是: FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF

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

每次文本有一个或\r\n\r指针向前移动4个位置。但真正糟糕的是,当我高亮显示时,样式文本又增加了4个位置。甚至,我认为他比种族主义者更不稳定。请在这方面给我一些建议

谢谢你,德夫

我用于尝试此操作的文本是:

FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF

(4行,在最后一个f之后有一个载波返回馈送)

此外,此代码不适用于我的代码(是否具有不稳定的行为):

FFFFFFFFFFAAFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF

(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);
            }
MatchCollection CarrierReturns=main-general.Build_-Regex(@“[\r\n\r]”,false);
MatchCollection WordsFound=MainGeneral.Build_Regex(“[a]”,false);
foreach(在WordsFound中匹配x){
int StringCarrierCount=0;
如果(CarrierReturns.Count>0)
{
foreach(匹配CarrierReturns中的CR)
{
如果(x指数>CR指数)
{
textBox1.Text+=“CI:”+StringCarrierCount+“-”;
打破
}
StringCarrierCount++;
}
}
如果(x.Index

提前谢谢,请在评分不好之前问我!:)

行分隔符可以是
\r\n
(回车+换行)、
\n
(单独换行)或
\r
(单独换行)。正确的匹配方法是使用
\r\n |[\r\n]

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


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

我们需要输入/正则表达式/输出。你发布的所有其他“噪音”对我们都没有用处。我真的解决了这个问题,在提要上应用xaml(以纯文本形式出现),并将所有内容放在段落块中。不,首先是因为我在windows中,richtextbox中的CRLF总是两个字符:CR和LF。第二个例子第一个很好,第二个不行。正则表达式是可以的,正如我所说的,问题是当我应用字体样式时指针会移动,对于纯文本,使用正则表达式进行解析完全没有问题。无论如何,谢谢如果这是一个.NET正则表达式,方括号之间的所有内容都会形成一组字符,可以单独匹配。每次应用时,它都匹配一个字符:
\r
\n
。这真的是你想要的吗?如果你知道行分隔符总是
\r\n
,那么你为什么要尝试匹配
\n\r\n
?因为我接受从我不知道的地方粘贴的副本:(如果我尝试使用\r\n或\r\n不添加特殊的CHR。我想要的是catch\r\n或\r:S谢谢你的提示