Регулярные выражения в 1С #438230


#0 by Bugmenot
Помогите пожалуйста, составить шаблон. Что-то я очень сомневаюсь что это возможно... Задача следующая, нужно заменить в тексте только часть шаблона, пример: Как видите в Часть2 я использовал "просмотр вперед" и "(" не будет попадать в найденный текст. А вот как сделать, что бы и первая часть шаблона не попадала в результат - не представляю. Ведь насколько я знаю, реализация в VBScript не поддерживает "просмотра назад"...
#1 by Bugmenot
Знаю и профи сюда заглядывают иногда, а не только любители трепа в ОФФ-ах )
#2 by Mitriy
ну вот... взял и обозвался...
#3 by Stepa86
приведи пример, а то чот сложно думать в понедельник с утра
#4 by vde69
нифига не понял задачу, сформулируй с примерами
#5 by Bugmenot
Дык, я с примером и написал! ) Не знаю как еще объяснить, нужно заменять только часть текста по шаблону... Т.е. "не_заменять_ВОТ_ЭТО_ЗАМЕНИТЬ_это_тоже_не_заменять" Как исключать из найденного вхождения окончание шаблона я знаю, а вот с началом шаблона - засада! (
#6 by Stepa86
а СтрЗаменить( лТекст , "не_заменять_ВОТ_ЭТО_ЗАМЕНИТЬ_это_тоже_не_заменять" , "не_заменять_ВОТ_НА_ЭТО_ЗАМЕНИТЬ_это_тоже_не_заменять" ); не прокатит?
#7 by Bugmenot
проблема в том что первая часть шаблона не постоянна, там может быть и пробел, и символ, и вообще пусто... С регулярными выражениями знаком? Язык шаблона очень широк и гибок в этом смысле, в классической реализации... Вот первая часть выражения: ([^a-zA-Z_0-9.]|^) - это не какой-то строго определенный текст.
#8 by Stepa86
с регэкспом знаком, но это не значит, что я не люблю простые решения... примеры ты так и не привел
#9 by Quadro_pb
А не проще вместо [^a-zA-Z_0-9.] одну точку поставить? Она как бы для этого и есть.
#10 by Живой Ископаемый
скажи что менять нужно...
#11 by Bugmenot
Но там же не любой символ ) Красивее можно написать так, ИМХО: W[^.] Но вопрос ведь не в этом!!! ) "ИмяФункции" на "ИмяМодуля.ИмяФункции" в произвольном коде... Только не надо меня за типовой обработкой на диск ИТС посылать! ))
#12 by Живой Ископаемый
2 а как ты локализуешь "ИмяФункции"? Как последовательность, перед которой идет пробел, а после которой - открывающаяся скобка?
#13 by Stepa86
или запятая, или откр. скобка в начале
#14 by Bugmenot
Как последовательность перед которой идет все что угодно кроме цифро-буков, что бы исключить "ЭтоНеМоя1ИмяФункции" и кроме ".", что бы исключить методы объектов. А после да, открывающаяся скобка.
#15 by Stepa86
быстрее кодом написать, чем регэкспом, и понятнее будет... находим нужную подстроку, смотрим на один символ левее ее, если не удовлетворяет шаблону часть1, то заменяем, иначе топаем дальше...
#16 by Волесвет
хм ... выдираем весь текст крутим его  потом возвращаем результат поверх изначального ... крутим -  ну тут уж как фантазия подскажет можно и так и сяк и тд и тп...
#17 by Bugmenot
не люблю решений "в тупую" )
#18 by Stepa86
"Умный программист пишет тупым кодом гениальные вещи а не наоборот..."(с)
#19 by Stepa86
ты хочешь получить неподдерживаемый кусок кода, который даже ты с трудом поймешь через месяц, когда его понадобится подправить???
#20 by Bugmenot
Ты хочешь убедить меня что регэкспы - плохо? )
#21 by Bugmenot
+ Сравни скорость типовой обработки, которая построчно модули перебирает )
#22 by Stepa86
они хороши в меру, особенно когда нужно проверить строку на соответствие шаблону эл. почты или что то в этом роде, но язык регекспов достаточно сложен и если можно сделать то же самое, но без него, то лучше делать без него...
#23 by Живой Ископаемый
2 Почему - сразу плохо.. Либо ты имеешь время на то, чтобы понять регекспы на требуемом для твоей задачи уровне - либо ты не имеешь.. Если тебе нужно решить проблему  быстро (заткнуть ее) - Степан тебе дело предлагает.. Если же ты хочешь решить проблему как задумал, то это у тебя просто займет несколько болье времени. ну и собственно чтобы решить ее - нужно не на форуме спрашивать, а читать первоисточники и экспериментировать... Это единственный верный способ... Ну еще вариант - попросить Морфея загрузить в тебя знания Регекспа, чтобы ты как Нео смог сказать "Я знаю регэкспы!"
#24 by Bugmenot
Читал. Регэкспы знаю хорошо. Согласен, зря тему завел. На регэкспах из VBScript то что я хочу не реализовать. Тут Perl нужен или C#
#25 by Stepa86
мой вариант в 1) Быстро пишется без долгого битья головой ап_стену, как бы шаблон составить, чтоб заработало наконец? 2) пишется минут 20 вместе с проверкой (ты уже 2 часа пытаешься регэкспы побороть судя по времени создания сабжа) 3) Прост и легко модифицируем, поэтому доработать смогут даже новички при необходимости 4) не думаю, что скорость выполнения будет так важна...
#26 by Bugmenot
1) Для меня написать шаблон не "битье головой" :) 2) Написал уже давно :) Правда криво, это да )
#27 by Bugmenot
Функция ВыполнитьЗамену(Знач Текст)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С