我试图突出显示正则表达式中标记的单词,字母或任何内容。 我在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);
}
提前致谢,请先评价我好评! :)
答案 0 :(得分:1)
行分隔符可以是\r\n
(回车+换行符),\n
(仅换行)或\r
(仅回车)中的任何一个。匹配一个的正确方法是\r\n|[\r\n]
。
你的正则表达式 - [\r\n|\n\r]
- 只匹配一个字符; \r
,\n
或|
中的任何一个。这意味着,只要行分隔符为\r\n
,您的代码就像两个行分隔符,而不是一个。
您的代码中可能还有其他错误,但我真的不明白它正在尝试做什么。我确定正则表达式是不正确的。