Идет бета-тестирование портала. Об ошибках пишите нам или на форуме.

Пример работы с регулярными выражениями

0

Полезные технологии

Описание

Довольно часто встречается задача выделения из строки значимой информации. Например, получить из назначения платежа перечень номеров договоров по которым поступил платеж. К сожалению контрагент который перечисляет платеж волен поступать с назначением так как ему вздумается. Если платежей немного, то нетрудно вручную разобраться с такой платежкой, а если таких платежей тысячи (как например в страховых компаниях)? Здесь на помощь приходят регулярные выражения.

//******************************************************************************
// ПолучитьНомераДоговоров()
//
// Параметры:
//  пСтрСтрокаСНомерами (строка) - строка с номерами договоров
//
// Возвращаемое значение:
//  Строка с номерами договоров разделенных запятыми.
//
// Описание:
//  Разбирает строку, выбирает из нее номера договоров.
//
Функция ПолучитьНомераДоговоров(пСтрСтрокаСНомерами)
		
	Попытка
		РегВыражения = СоздатьОбъект("VbScript.RegExp");	
	Исключение
		Возврат("");
	КонецПопытки;
	
	РегВыражения.Global = 1;
	РегВыражения.IgnoreCase = 1;
		
	// Получить номера договоров по ОСАГО

	// ... предварительно подготовить строку с номерами
	пСтрСтрокаСНомерами = СтрЗаменить(пСтрСтрокаСНомерами," ","");
	пСтрСтрокаСНомерами = СтрЗаменить(пСтрСтрокаСНомерами,"N","");	
	пСтрСтрокаСНомерами = СтрЗаменить(пСтрСтрокаСНомерами,"-","");	
	
	РегВыражения.IgnoreCase = 0;
	РегВыражения.Pattern = "[A|А][0-9]";

	СписокВхождений = РегВыражения.Execute(пСтрСтрокаСНомерами);	
		
	пСтрНомераДоговоров = "";
	пСтрНомерДоговора = "";

	Для А = 1 По СписокВхождений.Count Цикл
		пСтрНомерДоговора = СокрЛП(СписокВхождений.Item(А).Value);
		// ... на всякий случай замена, если были латинские символы
		пСтрНомерДоговора = "AAA" + Сред(пСтрНомерДоговора, 4);
		пСтрНомераДоговоров = пСтрНомераДоговоров + пСтрНомерДоговора + ",";
	КонецЦикла;
	
	// ...убрать последнюю запятую
	пСтрНомераДоговоров = Лев(пСтрНомераДоговоров,СтрДлина(пСтрНомераДоговоров) - 1);
			
	Возврат(пСтрНомераДоговоров);
	
КонецФункции // ПолучитьНомераДоговоров()

Оценка сообщества


Добавить плюс Добавить минус

Комментарии (3)

2.
+ -
19.11.2008 10:11:27

olegn, а какая, если не секрет, у тебе строка на входе?

3.
+ -
19.11.2008 12:11:31

(1) Этого примера я не видел. Написал про то что делал сам. Скоро выложу еще один пример на тему разбора текстовых строк. Там используется конечный автомат.
(2) Обычно шла строка вида "ААА 04597654, ААА 1234567" и т.д. Причем символы А могли быть и русскими и латинскими. Могли указываться больше 3-ех символов "А", или наоборот меньше. С проблеами, без пробелов с символами "№" или "N" в разных местах. Насколько я помню это регулярное выражение после небольшой чистки строки обрабатывало все такие случаи.

Для добавления комментария необходимо зарегистрироваться.
Есть вопросы?
тел. (812) 309-06-46
support@infostart.ru
Обратная связь
Логин :
Пароль :
Забыли пароль?

Статистика

Пользователей: 43871

См. также