Выделите слова с помощью RegEx на RichTextBox с SilverLight - PullRequest
3 голосов
/ 16 ноября 2011

Я пытаюсь выделить слова, буквы или все, что помечено в регулярном выражении.Я использую RichTextBox в Silverlight (позаботьтесь о том, чтобы 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);
            }

Заранее спасибо, пожалуйста, спросите меня, прежде чем оценивать плохо!:)

1 Ответ

1 голос
/ 16 ноября 2011

Разделителем строки может быть любой из \r\n (возврат каретки + перевод строки), \n (только перевод строки) или \r (только возврат каретки). Правильный способ совпадения с одним будет с \r\n|[\r\n].

Ваше регулярное выражение - [\r\n|\n\r] - соответствует ровно одному символу; любой из \r, \n или |. Это означает, что когда разделитель строк равен \r\n, ваш код действует так, как если бы два разделителя строк, а не один.

В вашем коде могут быть и другие ошибки, но я не совсем понимаю, что он пытается сделать. Я уверен, что регулярное выражение неверно.

...