Добрый день. помогите с регулярными выражениями ))
есть текст:
CONFIG::
UT = 1
UF = 2
CONFIG::
UT = 1
UF = 2
CONFIG::
UT = 1
UF = 2
нужно вытащить значения UT и UF для каждого CONFIG
Делаю так:
Regex.Matches(matches[0].Groups[1].Value, @"CONFIG::(.*?)CONFIG::?", RegexOptions.Singleline | RegexOptions.IgnoreCase);
вытаскивает только
CONFIG::
UT = 1
UF = 2
CONFIG::
Спасибо!
Здравствуйте, Аноним, Вы писали:
А>Добрый день. помогите с регулярными выражениями ))
А>есть текст:
А>А>CONFIG::
А>UT = 1
А>UF = 2
А>CONFIG::
А>UT = 1
А>UF = 2
А>CONFIG::
А>UT = 1
А>UF = 2
А>
А>нужно вытащить значения UT и UF для каждого CONFIG
А>Делаю так:
А>А>Regex.Matches(matches[0].Groups[1].Value, @"CONFIG::(.*?)CONFIG::?", RegexOptions.Singleline | RegexOptions.IgnoreCase);
А>
А>вытаскивает только
А>А>CONFIG::
А>UT = 1
А>UF = 2
А>CONFIG::
А>
А>Спасибо!
IList<string> result = new List<string>();
string values = "CONFIG::UT = 1 UF = 2 CONFIG:: UT = 1 UF = 2 CONFIG:: UT = 1 UF = 2";
MatchCollection matchCollection = Regex.Matches(values, @"(?<=CONFIG::)(.*?)(?=CONFIG::)");
foreach (Match match in matchCollection)
{
result.Add(match.Value);
}
=) Только вот оптимально ли это =) не знаю )
Здравствуйте, Аноним, Вы писали:
Чуточку покрасивее сделал:
public class UtUf
{
public int Ut { get; set; }
public int Uf { get; set; }
public UtUf(int ut, int uf)
{
Ut = ut;
Uf = uf;
}
}
public static class Config
{
private static IEnumerable<int> GetIntegers(this string value)
{
MatchCollection matchCollection = Regex.Matches(value, @"\d+");
return from Match match in matchCollection
select Convert.ToInt32(match.Value);
}
public static IEnumerable<UtUf> GetUtUf(this string value)
{
MatchCollection matchCollection = Regex.Matches(value, @"(?<=CONFIG::)(.*?)(?=CONFIG::)");
return from Match match in matchCollection
select match.Value.GetIntegers()
into buf
select new UtUf(buf.FirstOrDefault(), buf.LastOrDefault()); // <- хотя вот это сбивает столку =)
}
}