Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Регэкспы Добавлено: 29.09.08 15:32  

Автор вопроса:  Arseny | ICQ: 298826769 
запарился...
предположим имеется файл, в котором имеются следующие строки:
проба1-1a2b3c, проба2-4a5b6c7d, проба3-8a9b10c,

с помощью регэкспа проба[0-9]-(.*?)[,. ] разбиваю их на группы типа:
проба1-1a2b3c,
проба2-4a5b6c7d,
проба3-8a9b10c,

ммм... че ж я хотел спросить... вот:
как поменять регэксп, чтобы выдавались данные только между дефисом и запятой. так сказать регэксп из регэкспа...

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 29.09.08 15:41
не совсем так выразился: -(.*?)[,. ] не предлагать, ибо поиск нужен только для таких пар типа: проба1-1a2b3c
а вообще в файле могут быть и другие сочетания, которые не требуются, но тоже могут попасть под маску -(.*?)[,. ]

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 29.09.08 18:45
Гм, насколько я помню после обработки текста получаем коллекцию найденных строк.
При этом для каждой строки имеется коллекция подстрок. В неё фигачатся куски строки заключенные в скобки. Так что по идее за счет этого (.*?) в подсроку у тебя записываются данные между дефисом и запятой.
Я сам с трудом понимаю, что написал)..

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 29.09.08 19:14
Arseny, тут все ОК. Фишка в том, что ты использовал группировку... ()- это знак группировки. В результате в каждом совпадении у тебя будет 2 группы. Первая круппа(с индексом 0) - это все найденное выражение, а вторая группа(с индексом 1) - это то что в крыглых скобках.
В результате выполнения следующего кода:
  1.  
  2. using System;
  3. using System.Text.RegularExpressions;
  4.  
  5. namespace ConsoleApplication1
  6. {
  7.     public class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             string testString = "проба1-1a2b3c, проба2-4a5b6c7d, проба3-8a9b10c,";
  12.             Regex exp = new Regex(@"проба\d-(\w*?)[,. ]");
  13.             MatchCollection matches = exp.Matches(testString);
  14.             if (matches.Count != 0)
  15.             {
  16.                 foreach (Match match in matches)
  17.                 {
  18.                     if (match.Success)
  19.                         Console.WriteLine(match.Groups[1].Value); // Show result
  20.                 }
  21.             }
  22.             else
  23.                 Console.WriteLine("Matches not found...");
  24.             Console.ReadLine(); // wait
  25.         }
  26.     }
  27. }


Мы имеем результат:

1a2b3c
4a5b6c7d
8a9b10c

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 30.09.08 01:05
Все верно, EROS.

Ответить

Номер ответа: 5
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #5 Добавлено: 30.09.08 10:52
БОЛЬШОЕ спасибо всем. :) кажется я становлюсь мазохистом: меня начали прикалывать регэкспы.... :)

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 30.09.08 16:23
А почему именованные группы не используете? ИМХО так удобней.


проба\d-(?<blablabla>\w*?)[,. ]

aaa = match.Groups("blablabla";).Value


И не нужно путаться с индексами.

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 30.09.08 16:42
я через vb6. там вроде нет такого. или я ошибаюсь?

Ответить

Номер ответа: 8
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #8
Добавлено: 30.09.08 17:13
Не знаю, не работал в vb6 с ними.

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 30.09.08 22:13
кажется я становлюсь мазохистом

Ты уже давно им стал, раз все еще продолжаешь писать на VB6. Более того, тебя с полной уверенностью можно назвать извращенцем! :)

Ответить

Номер ответа: 10
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #10 Добавлено: 30.09.08 22:49
"не забывается такое никогда..." - слышал песенку? :P я консервативен. :) Ну а вообще - я живу не в мегаполисе, далеко не у всех стоят нормальные компы и системы иже с ними... писать под 98 на дотнете? Конечно преобладает XP, и, благодаря маркетингу M$ :), все чаще встречается даже виста, но не в кайф начинать разбираться с языком, когда получен заказ и определены сроки. Мне вполне хватает шестерки.

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 30.09.08 23:46
ой ну что за сказки? Я живе не в мегаполисе и вообще у нас только микрокалькуляторы продаются и счеты...

Я можно сказать живу в бабруйске, и тут нет и на намека на эти легендарные K5 и Pentium 133 и Altair.
Вопрос решается очень легко - типа беспроцентный кредит - и покупай хоть мощный ноут, Cray, лишь бы довез до дома.

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 01.10.08 01:05
А самолет купить можно?

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 01.10.08 02:05
Если банк даст тебе кредит - почему бы и нет?

Ответить

Номер ответа: 14
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #14 Добавлено: 01.10.08 10:48
2Бранд: Жди в гости.
P.S. Я жаловался не на свой комп, а на те, с которыми приходится работать. Кстати P133 - полно.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам