【问题标题】:Highlight words with RegEx on RichTextBox with SilverLight使用 SilverLight 在 RichTextBox 上使用 RegEx 突出显示单词
【发布时间】:2011-11-17 00:34:16
【问题描述】:

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

每当文本有 \r\n 或 \n\r 时,指针都会向前移动 4 个位置。但真正糟糕的是当我做高亮时,样式文本增加了 4 个位置。甚至,我认为他的行为比种族更古怪。请在这方面给我一些建议!

感谢 FailDev。

我用来试试这个的文字是:

ffffffffffffffffffff ffffffffffffff ffffffffffffffffffffff

(4行,最后一个f后面有一个运营商回车\换行)

这也不适用于我的代码(有或没有不稳定的行为):

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ffffffffffffff ffffffffffffffffffffff

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

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

【问题讨论】:

  • 我们需要输入/正则表达式/输出。您发布的所有其他“噪音”对我们毫无用处。
  • 我真的解决了这个问题,将 xaml 应用于提要(以纯文本形式出现)并将所有内容放在一个段落块中。

标签: regex parsing silverlight-4.0 richtextbox


【解决方案1】:

行分隔符可以是\r\n(回车+换行)、\n(仅换行)或\r(仅回车)中的任何一个。匹配一个的正确方法是使用\r\n|[\r\n]

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

您的代码中也可能存在其他错误,但我不太明白它在做什么。我确定正则表达式不正确。

【讨论】:

  • 不,首先因为我在windows中,richtextbox中的CRLF总是两个字符:CR和LF。其次,第一个例子工作正常,第二个没有。正则表达式没问题,正如我所说,问题是当我应用字体样式时指针会移动,而纯文本则用正则表达式解析完全没有问题。还是谢谢
  • 如果这是一个 .NET 正则表达式,方括号之间的所有内容形成一组字符,以单独匹配。每次应用时,它都匹配一个字符:\r\n|。这真的是你的意图吗?如果你知道行分隔符总是\r\n,你为什么还要尝试匹配\n\r
  • 因为我接受来自 i-dont-know-where 的复制粘贴 :( 另外,如果我尝试使用 \r 或 \n 不添加特殊字符。我想要的是 catch \r\n OR \ n\r :S 感谢您的提示
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2010-09-12
  • 2015-11-13
  • 1970-01-01
相关资源
最近更新 更多