在wpf richtextbox中查找文本中的所有数字实例

时间:2016-04-25 18:26:12

标签: c# wpf

我有一个winform应用程序,我需要提供查找和突出显示用户输入的文本中所有数字的功能。为此,我将wpf richtextbox添加到表单上的元素主机。单击按钮,我读取文本框中的文本以查找所有数字。问题是只突出显示该号码的最后一个实例,而不是所有实例。对于前 - 在文本中 - "订单是12个百吉饼。地址是13456 Lame st。"只有13456突出显示。代码如下:

    private void btnSave_Click(object sender, EventArgs e)
    {
        var wpfTextBox = (System.Windows.Controls.RichTextBox)elementHost1.Child;
        Regex reg = new Regex("[0-9 -()+]+$"); 
        var start = wpfTextBox.Document.ContentStart;
        while (start != null && start.CompareTo(wpfTextBox.Document.ContentEnd) < 0)
        {
            if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
            {
                var match = reg.Match(start.GetTextInRun(LogicalDirection.Forward));

                var textrange = new TextRange(start.GetPositionAtOffset(match.Index, LogicalDirection.Forward), start.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward));
                textrange.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Blue));
          }
            start = start.GetNextContextPosition(LogicalDirection.Forward);

        }

    }

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

您突出显示的代码似乎工作正常但我在tester运行您的正则表达式并且它没有在您提供的字符串中拾取任何数字。要突出显示您提供的字符串中的所有数字,我用此替换了您的正则表达式;

Regex reg = new Regex(@"\d+");

虽然这确实突出了您给出的具体示例中的数字,但在所有情况下可能都不匹配您想要的所有内容。为了微调正则表达式,我强烈建议使用我上面链接的在线工具。