如何使用捕获组和替换组合Notepad++的多个RegEx命令?
我正在使用单独的专用转换工具将导出的SQL视图作为文件转换为不同的语法。这个工具无法处理某些命令和格式,所以我使用Notepad++和正则表达式提前修改文件 到目前为止,我得到了我想要的结果,但它需要三个单独的查找/替换操作。如果可能的话,我想把这三个正则表达式操作减少到一个 我正在使用记事本++7.7.1 64位,查找/替换为正则表达式搜索模式-。匹配换行检查 您将在我的代码中看到,我已经在交替使用捕获组。我想我可以将前两个RegEx步骤作为额外的捕获组组合到步骤3中,但没有成功,可能是因为它们是嵌套的 我尝试通过相应地增加引用编号来引用嵌套的组,但是没有效果,结果是空白 下面是一个示例SQL视图文件。这不是一个有效的视图,因为我添加了oldschema2,所以正则表达式可以为其中一个替换找到一些东西,但作为一个示例,它很有代表性如何使用捕获组和替换组合Notepad++的多个RegEx命令?,regex,notepad++,regex-group,Regex,Notepad++,Regex Group,我正在使用单独的专用转换工具将导出的SQL视图作为文件转换为不同的语法。这个工具无法处理某些命令和格式,所以我使用Notepad++和正则表达式提前修改文件 到目前为止,我得到了我想要的结果,但它需要三个单独的查找/替换操作。如果可能的话,我想把这三个正则表达式操作减少到一个 我正在使用记事本++7.7.1 64位,查找/替换为正则表达式搜索模式-。匹配换行检查 您将在我的代码中看到,我已经在交替使用捕获组。我想我可以将前两个RegEx步骤作为额外的捕获组组合到步骤3中,但没有成功,可能是因为它
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;或者只是;我们可能会有期望的输出,但不确定
单个正则表达式太复杂了。我建议你用你最喜欢的脚本语言编写一个脚本。一个正则表达式太复杂了。我建议你用你最喜欢的脚本语言写一个脚本。