Как я могу выполнить синтаксический анализ всех значений после специального тега
У меня есть текстовый файл, структурированный следующим образом.
[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();