在Regex C#中操作匹配值

时间:2015-07-22 15:35:04

标签: c# arrays regex text richtextbox

我已经阅读了一个文本文件并匹配了我感兴趣的数据。我的问题是,操作我匹配的数据的最佳方法是什么? 我正在阅读文本文件的代码是。

self.collectionView?.backgroundColor = UIColor(patternImage: UIImage(named: "image.png")!)

结果现在看起来像:

 OpenFileDialog dialog = new OpenFileDialog();
       dialog.Filter =
          "All files (*.*)|*.*";
       //dialog.InitialDirectory = "C:\\";
       dialog.Title = "Select a text file";

       if (dialog.ShowDialog() == DialogResult.OK)
       {
           string fname = dialog.FileName; // selected file
           label1.Text = fname;
           if (String.IsNullOrEmpty(richTextBox1.Text))
           {
               var matches1 = Regex.Matches(System.IO.File.ReadAllText(fname), @"L10 P\d\d\d R \S\S\S\S\S\S\S")
          .Cast<Match>()
          .Select(m => m.Value)
          .ToList();

               richTextBox1.Lines = matches1.ToArray();
           }

我需要它看起来像这样:

L10 P015 R +4.9025

#2015=4.9025 被排除在外,L10变为P015#2015R变为+,且数字保持不变。

4 个答案:

答案 0 :(得分:1)

使用捕获组:

  • 首先将正则表达式更改为:

    L10 P(?<key>\d{3}) R \S(?<val>\S{6})
    

    (?<name> ... )语法允许您声明命名的捕获组。您可以稍后检索该组匹配的值。

  • 接下来,如果您有匹配对象,则可以使用match.Groups["key"].Valuematch.Groups["val"].Value提取匹配的组内容,如下所示:

    .Select(m => string.Format("#2{0}={1}", m.Groups["key"].Value, m.Groups["val"].Value))
    

答案 1 :(得分:0)

var matches = Regex.Matches(System.IO.File.ReadAllText(fname), @"L10 P\d\d\d R \S\S\S\S\S\S\S")
      .Cast<Match>()
      .Select(m => m.Value)
      .ToList();

string num1 = "2" + matches[1].Substring(1); // "2" + "015"
string num2 = matches[3].Substring(1); // "4.9025"

string finalValue = "#" + num1 + "=" + num2; // "#2015=4.9025"
richTextBox1.Text = finalValue;

我认为这应该有效,基于你的单个例子。

这假设我们只是总是忽略P015项的第一个字符和+4.9025项的第一个字符。

答案 2 :(得分:0)

为什么不简单地拆分接收流,你的规则是基本的,不需要正则表达式。

    string receivingStream = "L10 P015 R +4.9025";
    string[] tokens = receivingStream.Split(new char[] { ' ' });
  • 令牌[0] == L10
  • 令牌[1] ==日期
  • 令牌[2] == R
  • 令牌[3] ==数字

答案 3 :(得分:0)

您希望使用Regex.Replace来改变字符串一次,而不是通过所有这些匹配。您需要将分组添加到正则表达式,并在替换字符串中使用替换。

请参阅: https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx