正则表达式从组结果中获取组n

时间:2014-10-01 20:51:38

标签: regex regex-group

我的数据库查询结果为:

IEnumerable<ResultRecord> results_from_db_call = Db.GoGetItNow();

现在假设返回的类看起来像:

public class ResultsRecord
{
    public string DataBlob { get; set; }

    public int FirstID { get; set; }
    public int SecondNum { get; set; }
    public DateTime ThirdDate { get; set; }
    public string FourthTime { get; set; }
    public string FifthTime { get; set; }

}

现在,返回的结果记录只有DataBlob成员集

很可能看起来像:

<IK/12322>1354654  16/MAY/2014 18:01:01 - 20:01:01

所以,我需要填写其他成员,并希望与'每个'代表一起填写:

results.Each(f => f.FirstID = int.Parse(Regex.Match(f.DataBlob, @"\d+").Value));
results.Each(f => f.SecondNum = int.Parse(Regex.Match(f.DataBlob, @"\d+").Value));
results.Each(f => f.ThirdDate = DateTime.Parse(Regex.Match(f.DataBlob, @"\d+").Value));
results.Each(f => f.FourthTime = Regex.Match(f.DataBlob, @"\d+").Value));
results.Each(f => f.FifthTime = Regex.Match(f.DataBlob, @"\d+").Value));

嗯,正如您可以想象的那样,该正则表达式仅适用于第一个整数..

但是等等!我有一个正常工作的正则表达式来找到我需要的所有组:

(\d+)\>(\d+)  (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+)

这成功地将我需要的所有项目分组。

但是,问题是,如何获得SecondNum的第二个正则表达式组项目,ThirdDate的第三个正则表达式组项目,FourthTime的第四个正则表达式组项目以及FifthTime的第五个正则表达式组项目?

当我尝试

 (\d+)\>(\d+)  (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+){0}

我没有得到第一个(第0个)项目。

如何调用正则表达式从分组中获取第一个等项目?

results.Each(f => f.SecondNum = int.Parse(Regex.Match(f.DataBlob, @"????").Value));

1 个答案:

答案 0 :(得分:-1)

您应首先解析整个字符串,以便能够捕获不同的组:

string pattern = @"(\d+)\>(\d+)  (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+)";
Match m = Regex.Match(f.DataBlob, pattern);
// You can then refer to the matched group this way:
// m.Groups[1] = 12322
// m.Groups[2] = 1354654
// ...etc
Group g = m.Groups[2];
// Then parse into integer

请注意,捕获组从 1 开始,而不是0.您还可以查看示例here