2016-04-25 45 views
0

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

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

     } 

    } 

谢谢你的时间!

回答

2

你的代码突出显示似乎工作正常,但我跑了你的正则表达式在tester,它没有拿起你提供的字符串中的任何数字。为了突出显示您提供的字符串中的所有数字,我用这个替换了正则表达式;

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

尽管这确实会突出显示您给出的具体示例中的数字可能与所有情况下的所有内容都不匹配。为了优化正则表达式,我强烈建议使用一个在线工具,就像我上面链接的工具一样。

+0

谢谢你指出 - 我在另一个应用程序中使用了相同的正则表达式,它适用于我正在寻找的数字模式,所以我不认为正则表达式可能是一个问题。 – user6166859

相关问题