我有一个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);
}
}
感谢您的时间!
答案 0 :(得分:2)
您突出显示的代码似乎工作正常但我在tester运行您的正则表达式并且它没有在您提供的字符串中拾取任何数字。要突出显示您提供的字符串中的所有数字,我用此替换了您的正则表达式;
Regex reg = new Regex(@"\d+");
虽然这确实突出了您给出的具体示例中的数字,但在所有情况下可能都不匹配您想要的所有内容。为了微调正则表达式,我强烈建议使用我上面链接的在线工具。