Regex 带正则表达式的wpf richtextbox选择
我想给文件的匹配文本上色。 首先,我将文件文本加载到FileItem.Content中,然后使用regex获取匹配项,然后将内容放入richtextbox中,并使用匹配项设置插入符号位置和文本颜色。 以及填充richtextbox的代码Regex 带正则表达式的wpf richtextbox选择,regex,wpf,selection,richtextbox,Regex,Wpf,Selection,Richtextbox,我想给文件的匹配文本上色。 首先,我将文件文本加载到FileItem.Content中,然后使用regex获取匹配项,然后将内容放入richtextbox中,并使用匹配项设置插入符号位置和文本颜色。 以及填充richtextbox的代码 RtbCodes.Document.Blocks.Clear(); RtbCodes.Document.Blocks.Add(new Paragraph(new Run(item.Content))); foreach (Match m
RtbCodes.Document.Blocks.Clear();
RtbCodes.Document.Blocks.Add(new Paragraph(new Run(item.Content)));
foreach (Match m in item.Matches)
{
TextPointer start1 = RtbCodes.Document.ContentStart.GetPositionAtOffset(m.Index, LogicalDirection.Forward);
TextPointer end = RtbCodes.Document.ContentStart.GetPositionAtOffset(m.Index + m.Length, LogicalDirection.Backward);
if (start1 != null && end != null)
{
RtbCodes.Selection.Select(start1, end);
RtbCodes.Selection.ApplyPropertyValue(Run.BackgroundProperty, "red");
}
}
我的问题是插入符号的选择根本不正确。见下图。
我的正则表达式是[\$]{[.a-zA-Z\d]+},因此它将得到{blacklist.model1},但不是。
那么,richtextbox有什么问题
您正在计算文档开头的不可见元素开始符号,这就是所选内容的偏移量不正确的原因 要获得正确的位置,可以从Run元素的开头开始计数
html、正则表达式和FileItem类实际上并不需要重现该问题。但是他们会把人们吓跑,因为他们觉得即使是批评你所面临的问题都是相当具有挑战性的。如果你提供一个简单的例子——一个RichTextBox、一个段落、一次跑步,这些都是演示这个问题所需要的——你可以很快得到答案——通常在几分钟内。谢谢你的建议。谢谢你的答案。但第二场比赛的答案仍然不正确。请看第二张图片。基于您的代码newRun,我做了一个更改var i=0;foreach匹配项中的m。匹配项{var x=4*i;TextPointer start1=newRun.ContentStart.GetPositionAtOffsetm.Index+x,LogicalDirection.Forward;TextPointer end=newRun.ContentStart.GetPositionAtOffsetm.Index+m.Length+x,LogicalDirection.Backward;…i++;}“那么它就行了。但是为什么是4*need呢?在foreach循环中,每次你高亮显示一个选择,你都会插入更多不可见的符号……因此偏移量一直在漂移,你可以找到解决方案:首先找出foreach循环中的所有选择,将它们保存到一个集合中,然后在另一个foreach循环中逐个高亮显示它们。是的,哟你说得对。这很有效。非常感谢。
var newRun = new Run(item.Content);
RtbCodes.Document.Blocks.Add(new Paragraph(newRun));
TextPointer start1 = newRun.ContentStart.GetPositionAtOffset(m.Index, LogicalDirection.Forward);
TextPointer end = newRun.ContentStart.GetPositionAtOffset(m.Index + m.Length, LogicalDirection.Backward);