Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RegEx, помогите составить 
:(
    Опции темы
fromrus
Дата 11.2.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



есть такая вот строка:

10.17.7.158#ПЧ-11#НОД[email protected]#ПЧ-14#НОД[email protected]#ПЧ-2 Орехово#НОД[email protected]#ПЧ-9#НОД[email protected]#ПЧ-1#НОД[email protected]#ПЧ-32#НОД[email protected]#ПЧ-33#НОД[email protected]#АЛЕКС доввод#НОД[email protected]#ПЧ-2#НОД[email protected]#М-ПАВ доввод#НОД[email protected]#ОРЕХ. доввод#НОД[email protected]#ЛОСИН доввод#НОД[email protected]#М-ЯР. доввод#НОД[email protected]#МТКУР доввод#НОД[email protected]#УЗУНВ доввод#НОД[email protected]#ОЖЕР. доввод#НОД[email protected]#МПКУР.Ю доввод bad#НОД[email protected]#МПКУР.Г доввод#НОД[email protected]#ШЧ-2#НОД[email protected]#ШЧ-2 (2)#НОД[email protected]#ШЧ-10#НОД[email protected]#ШЧ-10 (СЦБ)#НОД[email protected]#ШЧ-4 (СЦБ)#НОД[email protected]#ШЧ-4 (Связь)#НОД[email protected]#ШЧ-13#НОД[email protected]#ШЧ-13 (2)#НОД[email protected]#ШЧ-13 (связь)#НОД[email protected]#ПЧ-18#НОД[email protected]#ПЧ-12#НОД[email protected]#ПЧ-16#НОД[email protected]#ПЧ-17#НОД6

Чтобы не разбираться в этом скажу,что данные тут сгруппированы следующим образом:

"цифры"#строка1#строка2@тоже самое@тоже самое

Дело в том,что строка2 может повторяться сколь угодно раз,как и строка1.
мне нужно вытащить все НЕОДИНАКОВЫЕ вхождения строк строка1 и строка2 и установить между ними соответствие-из текста видно,что каждой строке2 соответсвует много строка1,т.е. в результате ыввод должен быть следующий:
НОД1-"все что соответствует НОД1"
НОД6-"все что соответствует НОД6"
НОД N-"все что соответствует НОД N"

Помогите плз,а то уже с циклами замучился(алгоритмист из меня не очень)
P.S.как вы поняли здесь представлена лишь небольшая часть текста для экономии места

Добавлено через 6 минут и 21 секунду
в данном случае для сопоставления у меня есть тип NOD и у него поле LIST<string>,которое представляет все строки,ассоциированные для этого нода
PM MAIL ICQ   Вверх
Rififi
Дата 11.2.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Код
var s = ...;
var re = new Regex(@"(\d+\.\d+\.\d+\.\d+)\#([^\#]+)\#([^\#]+)(@|$)", RegexOptions.Compiled);
            

foreach (Match mc in re.Matches(s))
{
    var number = mc.Groups[1];
    var s1 = mc.Groups[2];
    var s2 = mc.Groups[3];
}

в цикле вытаскиваешь значения числа и строка1, строка 2 и делаешь с ними что хочешь.
PM MAIL   Вверх
source777
Дата 11.2.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(fromrus @  11.2.2009,  11:21 Найти цитируемый пост)
Помогите плз,а то уже с циклами замучился(алгоритмист из меня не очень)
Да тут алгоритм то вполне простой: найти все совпадения и сгруппировать их нужным образом:

Код

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace RegexTest
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            string text = @"10.17.7.158#ПЧ-11#НОД[email protected]#ПЧ-14#НОД[email protected]#ПЧ-2 Орехово#НОД[email protected]#ПЧ-9#НОД[email protected]#ПЧ-1#НОД[email protected]#ПЧ-32#НОД[email protected]#ПЧ-33#НОД[email protected]#АЛЕКС доввод#НОД[email protected]#ПЧ-2#НОД[email protected]#М-ПАВ доввод#НОД[email protected]#ОРЕХ. доввод#НОД[email protected]#ЛОСИН доввод#НОД[email protected]#М-ЯР. доввод#НОД[email protected]#МТКУР доввод#НОД[email protected]#УЗУНВ доввод#НОД[email protected]#ОЖЕР. доввод#НОД[email protected]#МПКУР.Ю доввод bad#НОД[email protected]#МПКУР.Г доввод#НОД[email protected]#ШЧ-2#НОД[email protected]#ШЧ-2 (2)#НОД[email protected]#ШЧ-10#НОД[email protected]#ШЧ-10 (СЦБ)#НОД[email protected]#ШЧ-4 (СЦБ)#НОД[email protected]#ШЧ-4 (Связь)#НОД[email protected]#ШЧ-13#НОД[email protected]#ШЧ-13 (2)#НОД[email protected]#ШЧ-13 (связь)#НОД[email protected]#ПЧ-18#НОД[email protected]#ПЧ-12#НОД[email protected]#ПЧ-16#НОД[email protected]#ПЧ-17#НОД6";

            Regex regExp = new Regex(@"([\d.]+)\#([^\#]+)\#([^\@]+)", RegexOptions.Compiled);
            Dictionary<string, List<string>> res = new Dictionary<string, List<string>>();
            foreach (Match m in regExp.Matches(text))
            {
                string val = m.Groups[2].Value;
                string node = m.Groups[3].Value;
                if (!res.ContainsKey(node))
                    res[node] = new List<string>();

             res[node].Add(val);
            }
            foreach(string key in res.Keys)
            {
                Console.WriteLine(key + ":");
                foreach(string val in res[key])
                    Console.WriteLine("\t"+val);
            }
            
            Console.ReadLine();
        }
    }
}


Добавлено через 2 минуты и 58 секунд
регулярку можно ещё упростить до @"([\d.]+)\#(.+?)\#(.+?)(@|$)"


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
fromrus
Дата 11.2.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



благодарю,уже пошел учить регулярки
PM MAIL ICQ   Вверх
source777
Дата 11.2.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Кстати в данном примере ценность применения регулярок весьма сомнительна, достаточно:
Код

        public static void Main(string[] args)
        {
            string text = @"10.17.7.158#ПЧ-11#НОД[email protected]#ПЧ-14#НОД[email protected]#ПЧ-2 Орехово#НОД[email protected]#ПЧ-9#НОД[email protected]#ПЧ-1#НОД[email protected]#ПЧ-32#НОД[email protected]#ПЧ-33#НОД[email protected]#АЛЕКС доввод#НОД[email protected]#ПЧ-2#НОД[email protected]#М-ПАВ доввод#НОД[email protected]#ОРЕХ. доввод#НОД[email protected]#ЛОСИН доввод#НОД[email protected]#М-ЯР. доввод#НОД[email protected]#МТКУР доввод#НОД[email protected]#УЗУНВ доввод#НОД[email protected]#ОЖЕР. доввод#НОД[email protected]#МПКУР.Ю доввод bad#НОД[email protected]#МПКУР.Г доввод#НОД[email protected]#ШЧ-2#НОД[email protected]#ШЧ-2 (2)#НОД[email protected]#ШЧ-10#НОД[email protected]#ШЧ-10 (СЦБ)#НОД[email protected]#ШЧ-4 (СЦБ)#НОД[email protected]#ШЧ-4 (Связь)#НОД[email protected]#ШЧ-13#НОД[email protected]#ШЧ-13 (2)#НОД[email protected]#ШЧ-13 (связь)#НОД[email protected]#ПЧ-18#НОД[email protected]#ПЧ-12#НОД[email protected]#ПЧ-16#НОД[email protected]#ПЧ-17#НОД6";
            Dictionary<string, List<string>> res = new Dictionary<string, List<string>>();
            string[] arr = text.Split(new char[]{'@'});
            foreach(string s in arr)
            {
                string[] matches = s.Split('#');
                string val = matches[1];
                string node = matches[2];
                if (!res.ContainsKey(node))
                     res[node] = new List<string>();
                
                res[node].Add(val);
            }

            foreach(string key in res.Keys)
            {
                Console.WriteLine(key + ":");
                foreach(string val in res[key])
                    Console.WriteLine("\t"+val);
            }
            
            Console.ReadLine();
        }



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.