与一组数字匹配的正则表达式

时间:2016-01-26 20:34:11

标签: regex notepad++

我用这段文字多行:

insert into table1(IDEORGVENSUB, IDEORGSUB, IDEVENDEDOR, IDEORGVEN_SUP, FECINI, FECFIN, STSACTIVO, USUCREACION, FECCREACION, FECMODIF, USUMODIF, IDEFAMILIA, IDEPRODFAMILIA, IDETIPANTICIPO, VALANTICIPO, STSCADUCO)
values (3960, 302, 6572, 3246, to_date('01-01-2015', 'dd-mm-yyyy'), null, 1, 'MCMSMCMS', to_date('01-01-2001', 'dd-mm-yyyy'), to_date('01-01-2001', 'dd-mm-yyyy'), 'MCMSMCMS', null, null, null, null, 0, 302, 'ASESOR X', 115, 234, 1, 'MCMSMCMS', to_date('01-01-2001', 'dd-mm-yyyy'), null, to_date('01-01-2001', 'dd-mm-yyyy'), 'MCMSMCMS', 47, 3, 1);

最终文本应为:

insert into table1 (IDEORGVENSUB, IDEORGSUB, IDEVENDEDOR, IDEORGVEN_SUP, FECINI, FECFIN, STSACTIVO, USUCREACION, FECCREACION, FECMODIF, USUMODIF, IDEFAMILIA, IDEPRODFAMILIA, IDETIPANTICIPO, VALANTICIPO, STSCADUCO)
values (3960, 302, 6572, 3246, to_date('01-01-2015', 'dd-mm-yyyy'), null, 1, 'MCMSMCMS', to_date('01-01-2001', 'dd-mm-yyyy'), to_date('01-01-2001', 'dd-mm-yyyy'), 'MCMSMCMS', null, null, null, null, 0);

我需要用')替换这部分(数字302改变);'获得最终文本:

, 302, 'ASESOR X', 115, 234, 1, 'MCMSMCMS', to_date('01-01-2001', 'dd-mm-yyyy'), null, to_date('01-01-2001', 'dd-mm-yyyy'), 'MCMSMCMS', 47, 3, 1);

我在Notepad ++中使用这个正则表达式替换为caracters“);”并获得最终文本但不起作用......

, [268|269|270|271|272|273|274|275|276|277|291|293|296|299|301|302|303|305|266|267|308|309|310|185|186|231|232|233|235|236|237|238|239|279|280|184|265|278|281|282|283|284|285|286|287|288|289|290|292|294|295|297|298|300|304|234|240|241|242|307|312|264|311|313], '+[\w ',()-:]*;$

我使用了另一个正则表达式,但仅适用于一个数字:

, 265, '+[\w ',()-:]*;$

请帮帮我

2 个答案:

答案 0 :(得分:3)

只需将您的模式从括号(字符类inregex)更改为括号,以便对可能的替代方法进行分组:

, (268|269|270|271|272|273|274|275|276|277|291|293|296|299|301|302|303|305|266|267|308|309|310|185|186|231|232|233|235|236|237|238|239|279|280|184|265|278|281|282|283|284|285|286|287|288|289|290|292|294|295|297|298|300|304|234|240|241|242|307|312|264|311|313), '+[\w ',()-:]*;$

enter image description here

通过制定范围可以简化它。编辑...

最后,通过将范围内的有效数字分组(以易于阅读的方式):

, (18[4-6]|23[1-9]|24[0-2]|26[4-9]|2[7-9][0-9]|30[0-9]|31[0-3]), '+[\w ',()-:]*;$

答案 1 :(得分:1)

[...]构造称为字符类,它匹配指定集合中的单个字符(偶数|被视为文字管道在他们中)。您打算使用分组构造,即(...)或非捕获变体(?:...)

要使用);替换所需的子字符串,可以使用以下正则表达式:

,\h+\d{3},\h+'+[\w\h',():-]*;$

或 - 如果您需要保留范围 -

,\h+(?:18[456]|23[1-9]|24[0-2]|26[4-9]|27[0-9]|28[0-9]|29[0-9]|30[0-57-9]|31[0-3]),\h+'+[\w\h',():-]*;$

并使用\);作为替代模式。

请注意,Notepad ++正则表达式模式中的常规空格可以替换为\h(水平空格)。我收缩了你的范围了。此外,替换模式中的 )必须转义,因为它在Boost条件替换模式中具有特殊含义。

enter image description here