替换记事本中的字符++但是在单引号内排除字符(第二个)

时间:2015-08-16 16:16:50

标签: regex notepad++ regex-negation regex-lookarounds

replace characters in notepad++ BUT exclude characters inside single quotation marks

很抱歉所有用户(特别是对于Avinash Raj)已经回答了第一个类似的问题 - 我确实忘记了第二种字符串。 (而且(这是令人伤心的事) - 我无法将解决方案从第一类问题调整为第二类字符串......)

我有两种不同的字符串:

SELECT column_name FROM table_name WHERE column_name IN ('A' , 'st9u' ,'Meyer', ....);
WHERE    a.object_type IN (' 'TABLE'', ''MATEerialIZED VIE3W'   ')

我想要将notepad ++中的所有字符从上到下替换,但是要从里面的替换字符中排除 单引号。

  

条件:在单引号部分之前/之后/之间不存在固体结构!

     

(这意味着 - 我不能使用   关键字" IN"或者#34;,"或"("或")"或";"这个正则表达式   ......!)

     

有一点是,单引号的两种结构是可能的:    &#39; Word |数字&#39; &#39;&#39; Word |数字&#39;&#39; < / EM>   (但是,如第二个例子所示,每个单引号之间的空格数不同!)。

目标字符串(单引号内的字符必须保持不变):

select column_name from table_name where column_name in ('A' , 'st9u' ,'Meyer', ....);
where    a.object_type in (' 'TABLE'', ''MATerialIZED VIE3W'   ')

如何在notepad ++中排除单引号(替换)?

1 个答案:

答案 0 :(得分:1)

可以合并recursive部分以获取' ... ' .... abc ''并在之后使用\K for resetting。这是需要跳过的部分。并使用the trick种,匹配管道中的剩余单词:

'\s*(?0)?[^']*'\K|(\w+)
  • (?0)?此处可以选择从开始
  • 粘贴模式
  • \s是{em>空格字符的shorthand [ \t\r\n\f]
  • \w字符的缩写 [A-Za-z0-9_]

并替换为\L\1以降低在第一个捕获组内捕获的单词或将\U\1降低到较高的单词。
NP ++ 6.7.9.2 中为我提供样本数据。 See regex101用于测试模式。

enter image description here