2016-04-25 81 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

相關問題