【发布时间】:2018-05-15 23:45:25
【问题描述】:
我需要一个解决方案来检查固定长度字符串的内容是否符合一组规则。如果没有,我需要检索失败的 Rules 列表、每个规则的 Expected 值以及包含在细绳。
这是我目前的解决方案:
string actual = "628IDENTREGISTER153004085616P30062010EAPFEMPA013.1";
// Dictionary<Tuple<rule, expected>, startingPostion>
var expected = new Dictionary<Tuple<string, string>, int>
{
{new Tuple<string, string>("900052", "628"), 0},
{new Tuple<string, string>("9000250", "IDENTREGISTER1"), 3},
{new Tuple<string, string>("900092", "53004085616"), 17},
{new Tuple<string, string>("900004", "P"), 28},
{new Tuple<string, string>("900089", "30062010"), 29},
{new Tuple<string, string>("900028", "E"), 37},
{new Tuple<string, string>("900029", "A"), 38},
{new Tuple<string, string>("900002", "P"), 39},
{new Tuple<string, string>("900030", "FEMPA013.0"), 40}
};
// Create an IEnumerable of all broken rules
var result = expected.Where(field =>
!field.Key.Item2.Equals(
actual.Substring(field.Value, field.Key.Item2.Length)))
// Prints:
// [(900030, FEMPA013.0), 40]
foreach (var res in result)
Console.WriteLine(res);
我确信有更好的方法来解决这个问题。此外,就目前而言,我对这个解决方案并不完全满意,因为它没有给我实际的字段。
谢谢。
【问题讨论】:
标签: c# regex linq pattern-matching