Похоже, большая часть поста здесь описана, что вам нужно здесь.Однако - что-то, что вам может понадобиться более сложное поведение - в зависимости от того, что вы анализируете.В вашем случае это может быть так, что вам не понадобится более сложный синтаксический анализ - но это зависит от того, какую информацию вы извлекаете.
Вы можете использовать группы регулярных выражений в качестве имени поля в классе, после чего можно записатьПример, подобный этому:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
public class Info
{
public String Identifier;
public char nextChar;
};
class testRegex {
const string input = "Lorem ipsum dolor sit %download%#456 amet, consectetur adipiscing %download%#3434 elit. " +
"Duis non nunc nec mauris feugiat porttitor. Sed tincidunt blandit dui a viverra%download%#298. Aenean dapibus nisl %download%#893434 id nibh auctor vel tempor velit blandit.";
static void Main(string[] args)
{
Regex regex = new Regex(@"%download%#(?<Identifier>[0-9]*)(?<nextChar>.)(?<thisCharIsNotNeeded>.)");
List<Info> infos = new List<Info>();
foreach (Match match in regex.Matches(input))
{
Info info = new Info();
for( int i = 1; i < regex.GetGroupNames().Length; i++ )
{
String groupName = regex.GetGroupNames()[i];
FieldInfo fi = info.GetType().GetField(regex.GetGroupNames()[i]);
if( fi != null ) // Field is non-public or does not exists.
fi.SetValue( info, Convert.ChangeType( match.Groups[groupName].Value, fi.FieldType));
}
infos.Add(info);
}
foreach ( var info in infos )
{
Console.WriteLine(info.Identifier + " followed by '" + info.nextChar.ToString() + "'");
}
}
};
Этот механизм использует отражение C #, чтобы установить значение для класса.имя группы сопоставляется с именем поля в экземпляре класса.Обратите внимание, что Convert.ChangeType не будет принимать никакого вида мусора.
Если вы хотите добавить отслеживание строки / столбца - вы можете добавить дополнительное разделение Regex для строк, но для того, чтобы сохранить цикл без изменений -все шаблоны соответствия должны иметь именованные группы.(В противном случае индекс столбца будет вычислен неправильно)
Это приведет к следующему выводу:
456 followed by ' '
3434 followed by ' '
298 followed by '.'
893434 followed by ' '