如何使用捕获组和替换组合Notepad++的多个RegEx命令?

如何使用捕获组和替换组合Notepad++的多个RegEx命令?,regex,notepad++,regex-group,Regex,Notepad++,Regex Group,我正在使用单独的专用转换工具将导出的SQL视图作为文件转换为不同的语法。这个工具无法处理某些命令和格式,所以我使用Notepad++和正则表达式提前修改文件 到目前为止,我得到了我想要的结果,但它需要三个单独的查找/替换操作。如果可能的话,我想把这三个正则表达式操作减少到一个 我正在使用记事本++7.7.1 64位,查找/替换为正则表达式搜索模式-。匹配换行检查 您将在我的代码中看到,我已经在交替使用捕获组。我想我可以将前两个RegEx步骤作为额外的捕获组组合到步骤3中,但没有成功,可能是因为它

我正在使用单独的专用转换工具将导出的SQL视图作为文件转换为不同的语法。这个工具无法处理某些命令和格式,所以我使用Notepad++和正则表达式提前修改文件

到目前为止,我得到了我想要的结果,但它需要三个单独的查找/替换操作。如果可能的话,我想把这三个正则表达式操作减少到一个

我正在使用记事本++7.7.1 64位,查找/替换为正则表达式搜索模式-。匹配换行检查

您将在我的代码中看到,我已经在交替使用捕获组。我想我可以将前两个RegEx步骤作为额外的捕获组组合到步骤3中,但没有成功,可能是因为它们是嵌套的

我尝试通过相应地增加引用编号来引用嵌套的组,但是没有效果,结果是空白

下面是一个示例SQL视图文件。这不是一个有效的视图,因为我添加了oldschema2,所以正则表达式可以为其中一个替换找到一些东西,但作为一个示例,它很有代表性

garbage 
text 
beforehand

CREATE VIEW [oldschema1].[viewname]
AS
SELECT DISTINCT 
                         TOP (100) PERCENT oldschema1.TABLENAME.FIELD1, oldschema1.TABLENAME.FIELD2
FROM            oldschema1.TABLENAME
WHERE        (oldschema1.TABLENAME.FIELD3 = N'Z003') AND oldschema2.TABLENAME.FIELD2 = 1
ORDER BY oldschema1.TABLENAME.FIELD1

GO

garbage 
text
after
下面是一些额外的细节,我试图通过每一关来实现

记事本++正则表达式步骤1-将视图块与创建视图隔离

查找: 创建视图。*\n创建视图*

替换: \二,

步骤2-在视图名称周围加引号

查找: 创建视图。*\r\nAS

替换: \1\2\3

步骤3-删除/替换各种文本,并在文件开头插入一行

查找: oldschema1\.\[oldschema1\]\.\124\[\ 124;\].\ 1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\1240\124

替换: ?1?2\;?3集模式模式名\\n\n\1

上述示例的预期输出为:

SET SCHEMA schemaname;

CREATE VIEW "viewname"
AS
SELECT DISTINCT 
                         TABLENAME.FIELD1, TABLENAME.FIELD2
FROM            TABLENAME
WHERE        (TABLENAME.FIELD3 = N'Z003') AND TABLENAME.FIELD2 = 1
ORDER BY TABLENAME.FIELD1

;
我通过以上三个步骤实现了这一点,但如果可能的话,我希望通过一次查找/替换来实现

我对RegEx是个新手,在这件事上是StackOverflow。非常感谢您的帮助。

步骤1 我不太确定,但我猜也许我们想要一个类似于:

[\s\S]*?(CREATE VIEW[\s\S]*GO\s*)[\s\S]*
TOP \(100\) PERCENT |oldschema1\.
将替换为$1,我们所需的数据在此捕获组中:

(CREATE VIEW[\s\S]*GO\s*)
我们甚至可以删除\s*:

试试看:

[\s\S]*?(CREATE VIEW[\s\S]*GO)[\s\S]*
用m旗

在的右侧面板中,如果您感兴趣,将进一步解释表达式

步骤2 我们可以尝试:

(CREATE VIEW)(.*)
并替换为:

SET SCHEMA schemaname;\n\n$1 "viewname"
步骤3 此步骤可能使用类似于以下内容的表达式完成:

[\s\S]*?(CREATE VIEW[\s\S]*GO\s*)[\s\S]*
TOP \(100\) PERCENT |oldschema1\.
被替换为空字符串

步骤4: \s*GO被替换为\n;或者只是;我们可能会有期望的输出,但不确定

第一步 我不太确定,但我猜也许我们想要一个类似于:

[\s\S]*?(CREATE VIEW[\s\S]*GO\s*)[\s\S]*
TOP \(100\) PERCENT |oldschema1\.
将替换为$1,我们所需的数据在此捕获组中:

(CREATE VIEW[\s\S]*GO\s*)
我们甚至可以删除\s*:

试试看:

[\s\S]*?(CREATE VIEW[\s\S]*GO)[\s\S]*
用m旗

在的右侧面板中,如果您感兴趣,将进一步解释表达式

步骤2 我们可以尝试:

(CREATE VIEW)(.*)
并替换为:

SET SCHEMA schemaname;\n\n$1 "viewname"
步骤3 此步骤可能使用类似于以下内容的表达式完成:

[\s\S]*?(CREATE VIEW[\s\S]*GO\s*)[\s\S]*
TOP \(100\) PERCENT |oldschema1\.
被替换为空字符串

步骤4: \s*GO被替换为\n;或者只是;我们可能会有期望的输出,但不确定


单个正则表达式太复杂了。我建议你用你最喜欢的脚本语言编写一个脚本。一个正则表达式太复杂了。我建议你用你最喜欢的脚本语言写一个脚本。