Regex 使用SilverLight在RichTextBox上使用正则表达式突出显示单词
我试图突出显示单词、字母或任何用正则表达式标记的东西。 我在Silverlight中使用RichTextBox(注意Silverlight没有使用与其他应用相同的.NET Framework,例如它没有TextRange) 每次文本有一个或\r\n\r指针向前移动4个位置。但真正糟糕的是,当我高亮显示时,样式文本又增加了4个位置。甚至,我认为他比种族主义者更不稳定。请在这方面给我一些建议 谢谢你,德夫 我用于尝试此操作的文本是: FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF (4行,在最后一个f之后有一个载波返回馈送) 此外,此代码不适用于我的代码(是否具有不稳定的行为): FFFFFFFFFFAAFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF (4行,在最后一个f之后有一个载波返回馈送) 该创意以蓝色、粗体和下划线突出显示“a”字符 我最后尝试的代码是: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
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谢谢你的提示