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

Regular expression that matches with a group of numbers

我有多行包含此文本:

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++ 中使用这个正则表达式来替换字符 ");"并获得最终文本但不起作用...

, [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 ',()-:]*;$

请帮帮我

只需将您的模式从括号(正则表达式中的字符 class)更改为括号,以便对可能的备选方案进行分组:

, (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 ',()-:]*;$

可以通过制定范围来进一步简化。即将...

最后,将这些有效数字分组到范围内(以一种易于阅读的方式):

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

[...] 构造称为 字符 class,它匹配指定集合中的 单个字符 (甚至 | 也被认为是其中的文字管道)。您打算使用 grouping 构造,即 (...) 或 non-capturing 变体 (?:...).

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

,\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++ 正则表达式模式中的常规 space 可以替换为 \h(水平 space)。我稍微缩小了你的范围。此外,) 必须在替换模式中转义,因为它在 Boost 条件替换模式中具有特殊含义。