Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:59

Регулярное выражение

Автор 12040, 11 дек 2014, 02:08

0 Пользователей и 1 гость просматривают эту тему.

12040

Здравствуйте. Подскажите, пожалуйста.
Есть следующий текст:
"Итого товаров на странице                                              1                      1 123,34          288,89        1 233,44               132,57     1 767,27           268,67           


Общая цена товаров: 7 227,5 Руб., в т.ч. НДС 18% 1 102,51 Руб. Скидка: 544,01 Руб."
Следующий паттерн:
"([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?]){2,30}([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?])\s*[\s\S]{0,18}"
Не находит, но и не зависает. Если после этого паттерна поставить букву "о", или "б", или "щ" и т.п.(буквы, идущие после сумм), то зависать также не будет. А если поставить, например "и"
"([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?]){2,30}([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?])\s*[\s\S]{0,18}и", то всё зависает. Объясните, пожалуйста, в чём дело.

MuI_I_Ika

а что вы с эти паттерном делаете?

12040

Цитата: MuI_I_Ika от 11 дек 2014, 10:36
а что вы с эти паттерном делаете?
Функция ПолучитьПолучитьМассивИзвлекаемыхЭлементовПоПаттерну(Текст, Паттерн, ЭтоЧисло=Ложь)
RegExp = Новый COMОбъект("VBScript.RegExp");// создаем объект для работы с регулярными выражениями
RegExp.MultiLine = Истина;  // истина — текст многострочный, ложь — одна строка
RegExp.Global = Истина;     // истина — поиск по всей строке, ложь — до первого совпадения
RegExp.IgnoreCase = Истина; // истина — игнорировать регистр строки при поиске

RegExp.Pattern = Паттерн;

ЧислоВхождений = 0;
Попытка
Matches=RegExp.Execute(Текст);
ЧислоВхождений=Matches.Count();
Исключение
КонецПопытки;
Если ЧислоВхождений = 0 Тогда
Возврат Неопределено;
КонецЕсли;

Match = Matches.Item(0);
SubMatches = Match.SubMatches;
МассивИзвлекаемыхЭлементов = Новый Массив;
Для А=0 По SubMatches.Count()-1 Цикл
МассивИзвлекаемыхЭлементов.Добавить(?(ЭтоЧисло,ПреобразоватьВЧисло(SubMatches.Item(А)),SubMatches.Item(А)));
КонецЦикла;

Возврат МассивИзвлекаемыхЭлементов;
КонецФункции

ИзвлЭлементы = ПолучитьПолучитьМассивИзвлекаемыхЭлементовПоПаттерну(ТекстОбластьПоиска, ""([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?]){2,30}([ \dобэз\?]+[\.\,\-]{1,2}[ ]{0,2}[\dобэз\?]+\s*[^\dобэз\?])\s*[\s\S]{0,18}\s*Итого\s*ока");

Исправил выражение на следующее (не особо принципиально было {2,30}):
"[ \dобэз\?]+[\.\,]{1,2}[ ]{0,2}[\dобэз\?]{2}\s{0,5}([ \dобэз\?]+[\.\,]{1,2}[ ]{0,2}[\dобэз\?]{2})\s*Итого\s*ока"
Всё нормально работает.
Видимо, надо регулярные выражения попроще писать.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск