c# - 正则表达式:重复捕获组

标签 c# .net regex

我必须从 ASCII 文本文件中解析一些表格。这是部分示例:

QSMDRYCELL   11.00   11.10   11.00   11.00    -.90      11     11000     1.212
RECKITTBEN  192.50  209.00  192.50  201.80    5.21      34      2850     5.707
RUPALIINS   150.00  159.00  150.00  156.25    6.29       4        80      .125
SALAMCRST   164.00  164.75  163.00  163.25    -.45      80      8250    13.505
SINGERBD    779.75  779.75  770.00  773.00    -.89       8        95      .735
SONARBAINS   68.00   69.00   67.50   68.00     .74      11      3050     2.077

该表由 1 列文本和 8 列 float 组成。我想通过正则表达式捕获每一列。

我对正则表达式还很陌生。这是我想出的错误正则表达式模式:

(\S+)\s+(\s+[\d\.\-]+){8}

但该模式仅捕获第一列和最后一列。 RegexBuddy 还会发出以下警告:

You repeated the capturing group itself. The group will capture only the last iteration. Put a capturing group around the repeated group to capture all iterations.

我查阅了他们的帮助文件,但我不知道如何解决这个问题。

如何分别捕获每一列?

最佳答案

在 C# 中(修改自 this example ):

string input = "QSMDRYCELL   11.00   11.10   11.00   11.00    -.90      11     11000     1.212";
string pattern = @"^(\S+)\s+(\s+[\d.-]+){8}$";
Match match = Regex.Match(input, pattern, RegexOptions.MultiLine);
if (match.Success) {
   Console.WriteLine("Matched text: {0}", match.Value);
   for (int ctr = 1; ctr < match.Groups.Count; ctr++) {
      Console.WriteLine("   Group {0}:  {1}", ctr, match.Groups[ctr].Value);
      int captureCtr = 0;
      foreach (Capture capture in match.Groups[ctr].Captures) {
         Console.WriteLine("      Capture {0}: {1}", 
                           captureCtr, capture.Value);
         captureCtr++; 
      }
   }
}

输出:

Matched text: QSMDRYCELL   11.00   11.10   11.00   11.00    -.90      11     11000     1.212
...
    Group 2:      1.212
         Capture 0:  11.00
         Capture 1:    11.10
         Capture 2:    11.00
...etc.

关于c# - 正则表达式:重复捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172643/

相关文章:

c# - 使用 linq 和 Entity Framework 构建嵌套表达式

c# - 如何在 C# 中返回空值而不是空值

regex - ag Silver Searcher : rules for lookahead/lookbehind patterns?

JavaScript RegEx 取代 HTML 编码

c# - 更新到 beta8 后无法发布 asp.net 5 应用程序 - 依赖项......无法解决

c# - 加力的同时旋转物体

.net - 子类可以继承构造函数吗?

c# - 拦截所有 WM_MOUSEWHEEL 消息

c# - 如何在运行时创建可变维度数组?

php - 找到 [abc] 而不是 [;;abc] 的正则表达式