Поправьте регулярное выражение...
От: Аноним  
Дата: 12.11.10 00:23
Оценка:
Добрый день. помогите с регулярными выражениями ))
есть текст:
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::


Спасибо!
Re: Поправьте регулярное выражение...
От: xobotik Россия  
Дата: 12.11.10 00:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день. помогите с регулярными выражениями ))

А>есть текст:
А>
А>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);
            }

=) Только вот оптимально ли это =) не знаю )
С уважением!
Re: Поправьте регулярное выражение...
От: xobotik Россия  
Дата: 12.11.10 01:05
Оценка:
Здравствуйте, Аноним, Вы писали:

Чуточку покрасивее сделал:
    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()); // <- хотя вот это сбивает столку =) 
        }
    }

С уважением!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.