【问题标题】:C# insert regex match into datatableC#将正则表达式匹配插入数据表
【发布时间】:2013-07-24 07:15:17
【问题描述】:

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

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”列中等等。

我从我之前的主题 (String separation C#) 中知道我可以指定 match.Group["C0"].Value,但我不知道如何在这里实现它。

【问题讨论】:

    标签: c# regex winforms visual-studio-2010


    【解决方案1】:

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

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

    您可以通过直接创建组数组来省略列表 - 这也可以:

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

    【讨论】:

    • 恐怕它不起作用,它只在第一列 System.Collections.Generic.List`1[System.Text.RegularExpressions.Group] 中给出这条消息
    • 用 .ToArray() 调整答案我忘了那个。
    猜你喜欢
    • 2015-03-24
    • 2021-07-29
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多