将notepad ++中EMPTY单引号内的空格数替换为相同数量的CHR(32)(第二个)

时间:2015-08-30 14:35:58

标签: regex notepad++

我希望将EMPTY单引号内的每个空格替换为CHR(32)的相同数字

  

条件:REGEX必须仅匹配此案例 - 不适用于带单引号之间符号的情况!

     

重要提示:构造,在每种情况下,将在以下情况下替换之间的空格:

\|\|\s*'
     

并结束(在每种情况下)(根据第1 + 2行):

'\s*\|\|

我用于搜索模式:

'(\s)+'

并替换:

CHR\(32\)

但是,这只替换了 ONE CHR(32)的所有空格!

以下示例:

vpl_text := to_char(vpl_text_old) || '    ' ||...;
vpl_text := to_char(vpl_text_old) || '' ||...;
(3)' WHERE   a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W'   ')  '   
(4) WHERE    a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W'   ')

我的不完整结果:

vpl_text := to_char(vpl_text_old) || CHR(32) ||...;
vpl_text := to_char(vpl_text_old) || '' ||...;
(3)' WHERE   a.object_type IN (CHR(32)TABLE'', ''MATerialIZED VIE3WCHR(32))  '   
(4) WHERE    a.object_type IN (CHR(32)TABLE'', ''MATerialIZED VIE3WCHR(32))

目标结果:

vpl_text := to_char(vpl_text_old) || CHR(32) || CHR(32) || CHR(32) || CHR(32) ||...;
vpl_text := to_char(vpl_text_old) || '' ||...;
(3)' WHERE   a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W'   ')  '   
(4) WHERE    a.object_type IN (' 'TABLE'', ''MATerialIZED VIE3W'   ')

第3 + 4行必须保持不变!

(&#34;(3)&#34;和&#34;(4)&#34;不属于此构造的一部分 - 仅用于解释!)。 < / p>

此主题是作为替代方案的原因: replace characters in notepad++ BUT exclude characters inside single quotation marks(4th)

如何在记事本++中定义替换REGEX正确?

2 个答案:

答案 0 :(得分:3)

您可以使用\G anchor继续上一场比赛结束的地方。像这样:

(?:'|\G(?!^))\s(?=\s*')'?

并替换为CHR\(32\)。请参阅test at regex101

  • (?:打开非捕获group。匹配文字'单引号|或:

  • \G(?!^)继续前一场比赛结束。没有(?!^) \ G也会匹配start。

  • \s将空格(?=\s*') if followed替换为任意数量的空格和另一个'

  • '?结尾'可选择维护\G序列。

Reference - What does this regex mean

答案 1 :(得分:0)

我找到了一个解决方案(我改编了Jonny5&#39;)

(在我更改并扩展此问题之后,(对Jonny5抱歉))

搜索模式:

(?:\|\|\s*'|\G(?!^))\s(?=\s*')'?

替换模式:

\|\| CHR\(32\)