Пришлось по работе парсить огромное количество всяческих текстов.
Надоел оверхед типа:
Regex r = new Regex(pattern,options);
MatchCollection mc = r.Matches(source);
foreach (Match m in mc)
{
T newObject = new T();
newObject.Property1 = m.Groups[groupName1].Value;
newObject.Property2 = m.Groups[groupName2].Value;
}
написал библиотеку, при помощи которой я атрибутами задаю патерн для РВ на класс и на каждое свойство атрибут — GroupName.
Типа:
[RegexAttributes("pattern", System.Text.RegularExpressions.RegexOptions.Singleline)]
public class User
{
[RegexPropertyAttribute("Name")]
public String Name { get; set; }
[RegexPropertyAttribute("SecondName")]
public String SecondName { get; set; }
[RegexPropertyAttribute("Age")]
public String Age { get; set; }
}
после чего, парсинг сводится к:
DataContext<User> dataContext = new DataContext<User>();
List<User> users = dataContext.GetList(source);
не учтены еще в Group'ах Capture — это предполагается сделать так:
если проперти — это список строк, тогда перебирать у групы каптуры... ну както так.
Вот хочу поинтересоваться — имеет ли какую ценность моя поделка? Не в денежном эквиваленте, а в качестве опубликовать на codeplex'e людям на радость!