2

我正在寻找与我的正则表达式匹配的行。

var dataTable = new DataTable();
foreach (var columnName in new[] { "Category", "Device", "Data Type", "Value", "Status" })
dataTable.Columns.Add(columnName);

Regex regex = new Regex(@"^(?:(?<C0>Put) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+))$");

var matches = lines.Select(line => regex.Match(line));

foreach (var match in matches)dataTable.Rows.Add(match.Groups.Cast<Group>().Skip(1).ToArray());

我的意见

Put this inside datatable spec

现在它将所有匹配项放入数据表中,但顺序正常。我希望能够指定将每个单词放在哪一列。例如,我希望能够将单词“this”放在“Value”列中,依此类推。

我从我之前的主题(字符串分离 C#)中知道我可以以某种方式指定 match.Group["C0"].Value,但我不知道如何在这里实现它。

4

1 回答 1

2

您可以通过首先以您喜欢的顺序使用元素实例化列表然后将其转换为数组来创建自己的顺序。

  dataTable.Rows.Add((new List<Group>{match.Groups["C0"], match.Groups["C1"]}).ToArray());

您可以通过直接创建组数组来省略 List<> - 这也可以:

  dataTable.Rows.Add(new Group[] { match.Groups["C1"], match.Groups["C0"] });
于 2013-07-24T07:33:04.457 回答