Нужно написать регулярное выражение для поиска и замены.
Примеры:
var1 const1 var2 var2.var3 var2.var4 var2.var5
должно замениться на
var1.var3 var1.var4 var1.var5 const1
var10 const1 var20 var20.var3 var20.var40
должно замениться на
var10.var30 var10.var40 const1
То есть
1. Нужно взять первую строку после const1 ограниченную пробелами (var2 или var20)
2. Во второй и последующих строках после const1 ограниченных пробелами (var2.var3 var2.var4 var2.var5 и var20.var3 var20.var40) нужно заменить строку из пункта 1 на строку, которая стоит до const1 (var1 и var10)
3. const1 ставится в конец
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания http://rsdn.ru/Info/rules.xml
$1 -- первая группа <bef>
$2 -- вторая группа <c>
$3 -- вторая группа <aft>
Его надобно поотладить, типа условного before и after + разобраться с пробелами. Но начать можно с этого варианта.
Упд.:
Вероятно я слишком просто понял задачу, поэтому скорее мой вариант это не то. Думал надо просто const1 заменить пробелом и отправить в конец. А тут все сложнее. Но думаю и мой способ можно
под решение переделать.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, igor-booch, Вы писали:
S>А это точно на регулярные выражения задача?
S>Очень грубо как-то так:
S>input -- "var1 const1 var2 var2.var3 var2.var4 var2.var5"
S>regex -- ^(?<bef>.*)(?<c>const1)(?<aft>.*)$
S>replace exp -- $1$3$2
S>$1 -- первая группа <bef> S>$2 -- вторая группа <c> S>$3 -- вторая группа <aft>
К сожалению, такой вариант не подходит. Сложность здесь а том, что количество групп для замены здесь произвольное (в примерах var2 меняется на var1 в 3-х местах, а var20 в 2-х). Возможно такое нельзя сделать с помощью регулярных выражений, и это будет печально. В этом случае хотелось бы услышать от людей имеющих хорошую алгоритмическую подготовку, о фундаментальных ограничениях регулярных выражений, которые не позволяют решить эту задачу.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания http://rsdn.ru/Info/rules.xml
Интуиция подсказывает, что здесь нужно вложенное регулярное выражение. Такое бывает?
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания http://rsdn.ru/Info/rules.xml
Здравствуйте, igor-booch, Вы писали:
IB>Здравствуйте, Sharov, Вы писали:
S>>Здравствуйте, igor-booch, Вы писали:
S>>А это точно на регулярные выражения задача?
S>>Очень грубо как-то так:
S>>input -- "var1 const1 var2 var2.var3 var2.var4 var2.var5"
S>>regex -- ^(?<bef>.*)(?<c>const1)(?<aft>.*)$
S>>replace exp -- $1$3$2
S>>$1 -- первая группа <bef> S>>$2 -- вторая группа <c> S>>$3 -- вторая группа <aft>
IB>К сожалению, такой вариант не подходит. Сложность здесь а том, что количество групп для замены здесь произвольное (в примерах var2 меняется на var1 в 3-х местах, а var20 в 2-х). Возможно такое нельзя сделать с помощью регулярных выражений, и это будет печально. В этом случае хотелось бы услышать от людей имеющих хорошую алгоритмическую подготовку, о фундаментальных ограничениях регулярных выражений, которые не позволяют решить эту задачу.
Я не большой спец в регулярках, хоть и написал их не мало, но оне все у меня давольно простые. Т.е. какие-то возможности типа lookahead и т.д. не использовал. Так, простейшие основы.
Так вот, что касается произвольного числа групп: если оне не следуют какому-то паттерну, то боюсь ничего не выйдет. https://stackoverflow.com/a/7854106/241446
Если это не тестовое задание, как я сначала подумал, я бы писал соотв. парсер.
S>Так вот, что касается произвольного числа групп: если оне не следуют какому-то паттерну, то боюсь ничего не выйдет.
Каждая группа это отдельное регулярное выражение, по которому нужно провести поиск и замену. Вот я и подумал про вложенные РВ.
S>Если это не тестовое задание, как я сначала подумал, я бы писал соотв. парсер.
Вообще исходная задача поправить код C#. Нужны РВ, поддерживаемые VS или каким-нибудь текстовым редактором.
Конечно можно написать парсер, но это не интересно, хочется углубить свои знания РВ.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания http://rsdn.ru/Info/rules.xml
Здравствуйте, igor-booch, Вы писали:
S>>Так вот, что касается произвольного числа групп: если оне не следуют какому-то паттерну, то боюсь ничего не выйдет. IB>Каждая группа это отдельное регулярное выражение, по которому нужно провести поиск и замену. Вот я и подумал про вложенные РВ.
S>>Если это не тестовое задание, как я сначала подумал, я бы писал соотв. парсер. IB>Вообще исходная задача поправить код C#. Нужны РВ, поддерживаемые VS или каким-нибудь текстовым редактором. IB>Конечно можно написать парсер, но это не интересно, хочется углубить свои знания РВ.