Regex только 14 чисел

У меня есть следующий текст:

DiretorioXmlImpressao=C:\\Program Files (x86)\\TESTE\\XmlImpressao\\08187168000160\\

Я хотел бы выбрать все, кроме CNPJ (предложение из 14 символов в конце текста), поэтому я попробовал следующее регулярное выражение:

DiretorioXmlImpressao=[^0-9]+

Возвращено:

DiretorioXmlImpressao=C:\\Program Files (x

но я ожидал: 08187168000160


Извините, ребята, у меня есть небольшой опыт работы с регулярными выражениями, я просто не очень хорошо выражаюсь.

Я действительно хочу сделать это:

DiretorioXmlImpressao=C:\\Program Files (x)\\TESTE\\XmlImpressao\\

потому что мне нужны только 14 символов и \, потому что я могу использовать в этой замене. Это работает, за исключением случаев, когда в пути есть такие числа, как «x86».

regexp_replace(teste,'DiretorioXmlImpressao=[^0-9]+',E'DiretorioXmlImpressao=P:\\TESTE\\XmlImpressao\\','ig');

окончательный ожидаемый результат моего регулярного выражения и замены ниже

DiretorioXmlImpressao=P:\\TESTE\\XmlImpressao\\08187168000160\\

Спасибо!


person Thiago Ribeiro    schedule 15.11.2015    source источник
comment
Вы пробовали /DiretorioXmlImpressao=.*?([0-9]+)\\$/   -  person andlrc    schedule 15.11.2015
comment
Вы говорите своему регулярному выражению, чтобы получить все, что НЕ является числом 0-9. Он делает именно то, что вы ему сказали...   -  person SISYN    schedule 15.11.2015
comment
Если вам нужна только начальная часть, попробуйте также.   -  person bobble bubble    schedule 15.11.2015


Ответы (3)


Я не нашел красивого способа сделать это без группы сопоставления.

выделить все, кроме 14-символьного предложения в конце текста

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

/^(.*)[0-9]{14}\\$/
person Jameson    schedule 15.11.2015

Используйте этот шаблон:

/^(.*)([^\\]+\\?)$/

Он вернет часть, кроме окончания, как первое сгруппированное совпадение, а конечную часть — как второе.

Если вам не нужна вторая совпадающая часть, обновите вторую группу до:

/^(.*)(?:[^\\]+\\?)$/
person hjpotter92    schedule 15.11.2015

Я проверил это, как сказал сделать пузырь

DiretorioXmlImpressao=.*\D(?=\d)

и он работает, как я хотел

DiretorioXmlImpressao=C:\\Program Files (x86)\\TESTE\\XmlImpressao\\

Спасибо за все!

person Thiago Ribeiro    schedule 15.11.2015