我的数据库查询结果为:
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));
答案 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。