Как я могу выполнить синтаксический анализ всех значений после специального тега

У меня есть текстовый файл, структурированный следующим образом.

[email]
emailAddress
emailAddress
emailAddress

[somthingelse]
stuff
stuff
stuff

так далее...

Я безуспешно пробовал несколько методов регулярных выражений, чтения файлов и потокового чтения

Мне нужно получить все значения под каждым [xxxx] в список примеров:

List<string> email = new List<string>();

Поиск файла для [email] добавьте адрес электронной почты в список. продолжить чтение для следующего [smothingelse] добавить значения в список чего-то еще

так далее...

Любая помощь, пожалуйста

3 ответа

Решение

Вот ваше решение:

Dictionary<string,List<string>> values = new Dictionary<string, List<string>>();

var lines = File.ReadAllLines("file.txt");
var reg = new Regex(@"^\[(\w+)\]$", RegexOptions.Compiled);
string lastMatch = "";

foreach (var ligne in lines.Where(a=>!String.IsNullOrEmpty(a)))
{
    var isMatch =  reg.Match(ligne);
    if (isMatch.Success)
    {
        lastMatch = isMatch.Groups[0].Value;
        if(!values.ContainsKey(lastMatch))
            values.Add(lastMatch,new List<string>());
    }else
        values[lastMatch].Add(ligne);
}

Он даст вам словарь со всеми значениями для каждого тега, минуя пустые строки, ваш файл должен начинаться с тега, который вы упомянули. Regex просто для обнаружения [] присутствия и захвата контента. Он будет ассоциировать с тегом все элементы, следующие за тегом. пока другой тег не найден.

Конечно, как вы можете видеть, ожидаемый результат содержится в переменной values.

Похоже, файл.ini. Есть много библиотек C# для анализа этого. Но при условии, что вы хотите поступить по-своему:

foreach line in file:

    if line contains "[email]":
        _list_you_need  is "Email list"
        continue

    _list_you_need.push(line)

С Linq

        var emailList = File.ReadLines(inputFile)
                        .SkipWhile(x => x != "[email]")
                        .Skip(1)
                        .TakeWhile(x => !x.StartsWith("["))
                        .Where(x=>!string.IsNullOrEmpty(x))
                        .ToList();
Другие вопросы по тегам