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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RegExp, вытянуть вссе что между 
:(
    Опции темы
DenWPF
Дата 14.2.2010, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вообщем я использую очень ну удобную функцию самописную что бы вытащить все что находиться между двух элементов к прримеру,
вытащить на странице все: начинается на "name@" и заканчивается на ";". 
моя функция принимает string, RegEx_start, RegEx_end и взоращается List<string> со всеми значениями что находятся между этих строчек.
PM MAIL   Вверх
Dobermann
Дата 14.2.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Поздравляю! И в чем проблема?!
PM   Вверх
DenWPF
Дата 14.2.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

Regex rq = new Regex("user=");
        Regex rq1 = new Regex("'");
        private List<string> GetUsers(string str)
        {

            List<string> ls = new List<string>();
            int p1 = 0;
            int p2 = 0;
            while (p1 < str.Length)
            {
                Match m = rq.Match(str, p1);
                if (m.Success)
                {
                    p1 = m.Index + 5;
                    Match m1 = rq1.Match(str, p1);
                    if (m1.Success)
                    {
                        p2 = m1.Index;
                        if (str.Substring(p1, p2 - p1) == "")
                        {
                        }
                        else ls.Add(str.Substring(p1, p2 - p1));
                    }
                }
                else break;
            }
            return ls;
        }

довольно большой код, может что то есть более лучшего?
PM MAIL   Вверх
uranpro
Дата 14.2.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

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



DenWPF, а для чего это нужно ? в каких целях используется ?


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
wester
Дата 14.2.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



быстренько набросал код. работает но в производительности незнаю каков
Код

String[] words = {@"arhedhethrethname@ehrgeh;@",
                                 @"sdgdfgdsfhdgfhname@sdfsdfsdf;" }; // массив слов



            var mathRes= new List<string>(); //лист куда складываем все попадания
            const string pattern = @"name@\w+;"; // паттерн
            Match match;
            foreach (var word in words)
            {
                match = Regex.Match(word, pattern);
                if(match.Success)
                {
                    var item =
                        (new StringBuilder() {Capacity = 0}.Append(match.Value).Remove(0, 5).Replace(";",""))
                            .ToString();
                                    
                    mathRes.Add(item);
                    match.NextMatch();
                }

            }


Это сообщение отредактировал(а) wester - 14.2.2010, 19:55
PM MAIL   Вверх
DenWPF
Дата 14.2.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



нет, даётся строка одна! в ней много элементов найти надо.
PM MAIL   Вверх
wester
Дата 14.2.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

String word = @"dfdfh@name@12;dhfdshdhnam6@name@34;";
while (match.Success)
            {
                var item =
                        (new StringBuilder {Capacity = 0}.Append(match.Value).Remove(0, 5).Replace(";", ""))
                            .ToString();
                mathRes.Add(item);
                match=  match.NextMatch();
            }


PM MAIL   Вверх
DenWPF
Дата 14.2.2010, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



а можно что бы с любыми значениями ? просто я не понимаю какие переменные за что отвечают 
Remove(0, 5) ?  размер то первого вхождения разные могут быть..

PM MAIL   Вверх
wester
Дата 14.2.2010, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

а можно что бы с любыми значениями ?

да запросто

Цитата

просто я не понимаю какие переменные за что отвечают 
Remove(0, 5) 

Код

var item =
                        (new StringBuilder {Capacity = 0}.Append(match.Value).Remove(0, 5).Replace(";", ""))
                            .ToString();

1.создаю обьект StringBuilder
2.вставляю в него результат попадания
3.Удаляю первые пять символов с начала , потом с конца символ ;
(например в первое попадание в Match.Value будет храниться "name@12;" я удаляю первая пять символов , а потом удаляю последний символ

Цитата

размер то первого вхождения разные могут быть..

не очень понял. Ну да разные.просто я извлекаю все что лежит между name@ и ;

Это сообщение отредактировал(а) wester - 14.2.2010, 22:38
PM MAIL   Вверх
DenWPF
Дата 14.2.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



вместо 5 - надо размер вхождения первого.
Replace(";", "") - зачем?
PM MAIL   Вверх
wester
Дата 14.2.2010, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

вместо 5 - надо размер вхождения первого.

развер "name@" ? ну сделай две переменные "name@" и "\w+;" потом получи длину первой , 

Цитата

Replace(";", "") - зачем? 

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

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


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

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


 




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


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

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