Имя: Пароль:
1C
1С v8
Помогите составить регулярное выражение
,
0 Маленький Вопросик
 
21.08.13
20:27
Собственно сабжик:

"что-то там № [321312] от [23.12.12]"

нужно "выкусить" номер и дату записи
1 Рэйв
 
21.08.13
20:29
делов то..
2 Рэйв
 
21.08.13
20:29
что слаб о чтоли или лениво?
3 Маленький Вопросик
 
21.08.13
20:34
(2) забыл. разучился
4 Маленький Вопросик
 
21.08.13
20:34
не получается (((
5 1sik
 
21.08.13
20:59
Если запись всегда имеет один и тот же формат можно например найти № , а зная позицию № дальше плясать. СокрЛП и тому подобное, а так же результат проверить на тип число.
6 Fragster
 
модератор
21.08.13
21:11
RegExp = Новый COMОбъект("VBScript.RegExp"); // Объект для использования регулярных выражений
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим

RegExp.Pattern = "(\d{3}/\d{2}/\d{8}) от (\d{2})\.(\d{2})\.(\d{4})";
7 Fragster
 
модератор
21.08.13
21:11
8 Fragster
 
модератор
21.08.13
21:11
Структура = Новый Структура;
    Matches = RegExp.Execute(Текст);
    ОчиститьСообщения();
    Match = Matches.Item(0);
    Submatches = Match.Submatches;
    Структура.Вставить("Префикс", Лев(Submatches.Item(0),3));
    Структура.Вставить("Номер", Submatches.Item(0));
    Структура.Вставить("Дата", Дата(""+Submatches.Item(3)+Submatches.Item(2)+Submatches.Item(1)));
    Возврат Структура;
9 Fragster
 
модератор
21.08.13
21:13
для (0) подойдет (\S+) от (\d{2})\.(\d{2})\.(\d{4}) - у меня просто номер стандартизирован и в него метаданные закодированы сразу
10 Маленький Вопросик
 
21.08.13
21:21
RegExp = Новый COMОбъект("VBScript.RegExp");            
    
        RegExp.IgnoreCase = 0; //Игнорировать регистр
        RegExp.Global = 1; //Поиск всех вхождений шаблона
        RegExp.MultiLine = 0; //Многострочный режим
        RegExp.Pattern    ="[0-9]+\.[0-9]+\.[0-9]+"; //шаблон по "выкусыванию" даты договора        
        
        
        Matches=RegExp.Execute(Договор);
        ЧислоВхождений=Matches.Count();
        //
        Для к = 0 По ЧислоВхождений-1 Цикл
            ДатаДоговора = Дата(Matches.Item(к).value+" 0:00:00");
        КонецЦикла;        
        
        
        //========================================================
        
        RegExp.Pattern    ="№\S+"; //шаблон по "выкусыванию" номера договора        
        
        
        Matches=RegExp.Execute(Договор);
        ЧислоВхождений=Matches.Count();
        //
        Для к = 0 По ЧислоВхождений-1 Цикл
            НомерДоговора = СтрЗаменить(Matches.Item(к).value,"№","");
        КонецЦикла;
11 Маленький Вопросик
 
21.08.13
21:21
вот так сработало
12 Fragster
 
модератор
21.08.13
21:58
(11) а что не одним выражением?