2016-01-26 6 views
-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, '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 ',()-:]*;$ 

Помогите мне пожалуйста

+0

Что такое правило в словах?Попробуйте ', \ h + \ d {3}, \ h + '+ [\ w \ h',(): -] *; $' –

+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); от ");". Номер 302 изменяется в других строках. Это регулярное выражение не работает:, 265, '+ [\ w',() -:] *; $. Вместо 265 number shoul должно использоваться выражение, которое соответствует группе чисел. –

+0

Хорошо, вы можете сопоставить текст, который хотите заменить, с помощью ', \ h + \ d {3}, \ h + '+ [\ w \ h',(): -] *; $'? Я могу в своем «Блокноте ++». Или это должен быть диапазон, который у вас есть? –

ответ

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

Это может быть упрощено путем разработки более диапазонов. Coming ...

Наконец, группируя эти действительные числа в диапазоне (в удобном для чтения образом):

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

+0

Не работайте в Notepad ++ –

+0

Хорошо работает в блокноте, вы уверены, что у вас есть последняя версия (Если я не ошибаюсь, у старых были проблемы) ... – Enissay

+0

@CesarCasasola Также, можете ли вы разместить допустимые диапазоны для этого номера переменной для упрощения шаблона; до сих пор я заметил «184-186; 231-242; ... ' – Enissay

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

Смежные вопросы