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

C# 在wpf richtextbox中查找文本中的所有数字实例,c#,wpf,C#,Wpf,我有一个winform应用程序,需要提供查找和突出显示用户输入文本中所有数字的功能。为此,我将向表单上的元素宿主添加一个wpf richtextbox。点击一个按钮,我阅读文本框中的文本,找到所有的数字。问题是,只突出显示该编号的最后一个实例,而不是所有实例。对于文本中的ex-“订单是12个面包圈。地址是13456 Lame st。”只有13456突出显示。代码如下: private void btnSave_Click(object sender, EventArgs e) {

我有一个winform应用程序,需要提供查找和突出显示用户输入文本中所有数字的功能。为此,我将向表单上的元素宿主添加一个wpf richtextbox。点击一个按钮,我阅读文本框中的文本,找到所有的数字。问题是,只突出显示该编号的最后一个实例,而不是所有实例。对于文本中的ex-“订单是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);

        }

    }
private void btnSave\u单击(对象发送者,事件参数e)
{
var wpfTextBox=(System.Windows.Controls.RichTextBox)elementHost1.Child;
正则表达式reg=新正则表达式(“[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.gett.run(LogicalDirection.Forward));
var textrange=new textrange(start.GetPositionAtOffset(match.Index,LogicalDirection.Forward),start.GetPositionAtOffset(match.Index+match.Length,LogicalDirection.Backward));
textrange.ApplyPropertyValue(TextElement.ForegroundProperty,新的SolidColorBrush(Colors.Blue));
}
start=start.GetNextContextPosition(LogicalDirection.Forward);
}
}

谢谢你抽出时间

您的高亮显示代码似乎工作正常,但我在中运行了您的正则表达式,它没有从您提供的字符串中提取任何数字。为了突出显示您提供的字符串中的所有数字,我将您的正则表达式替换为:

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

虽然这会突出显示您给出的特定示例中的数字,但在所有情况下,它可能并不匹配您想要的所有数字。要微调正则表达式,我强烈建议使用类似于我上面链接的在线工具。

您的突出显示代码似乎工作正常,但我在a中运行了您的正则表达式,它没有拾取您提供的字符串中的任何数字。为了突出显示您提供的字符串中的所有数字,我将您的正则表达式替换为:

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

虽然这会突出显示您给出的特定示例中的数字,但在所有情况下,它可能并不匹配您想要的所有数字。要微调正则表达式,我强烈建议使用我上面链接的在线工具。

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