Notepad ++ Замена условия регулярного выражения - PullRequest
1 голос
/ 22 декабря 2011

У меня есть набор сценариев SQL, которые хотят изменить схему.

create table Service.Table1 (col1 varchar(100));
create table Operation.Table2 (col1 varchar(100));
create table Support.Table3 (col1 varchar(100));

Однако схема изменится

Service -> Sev
Operation -> Opn
Support -> Spt

Регулярное выражение поиска простое ([A-Za-z0-9_]+)\.([A-Za-z0-9_]+)

Однако, как сделать условную замену в Notepad ++ или других инструментах, если они могут?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 декабря 2015

Если у вас есть предопределенный набор схем, вы можете использовать условную замену в Notepad ++ следующим образом:

Найти : (?:(?<a>Service)|(?<b>Operation)|(?<c>Support))\.(?<n>[A-Z0-9_]+) Заменить : (?{a}Sev:(?{b}Opn:Spt)).$+{n}

Соответствующий регистр должен быть отмечен выключен и Регулярное выражение должно быть .

enter image description here

0 голосов
/ 22 декабря 2011

Реализация регулярных выражений в Notepad ++ не очень эффективна; так,

другие инструменты, если они могут?

Вот способ сделать это:

perl -pi.back -e '%tr=(Service=>"Sev",Operation=>"Opn",Support=>"Spt");s/(?<=create table )(\w+)/$tr{$1}/e;' TheFile

Вы можете добавить любое количество Original => 'Modified' как хотите в хэш %tr.

TheFile будет скопирован в TheFile.back перед обработкой.

0 голосов
/ 22 декабря 2011

Я бы запустил замену 3 раза, по одному разу для каждого имени схемы:

Find:
create table Service\.
Replace with:
create table Svc.

Find:
create table Support\.
Replace with:
create table Spt.

Find:
create table Operation\.
Replace with:
create table Opn.

Или вот тот, который использует групповые ссылки:

Find:
Service(\.[^\s]+)(.*)
Replace with:
Svc\1\2

Здесь \1 будет содержать оператор точки, а имя таблицы и \ 2 - оставшуюся часть строки.

...