Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带正则表达式的wpf richtextbox选择_Regex_Wpf_Selection_Richtextbox - Fatal编程技术网

Regex 带正则表达式的wpf 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

我想给文件的匹配文本上色。 首先,我将文件文本加载到FileItem.Content中,然后使用regex获取匹配项,然后将内容放入richtextbox中,并使用匹配项设置插入符号位置和文本颜色。 以及填充richtextbox的代码

    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);