2015-10-16 2 views
1

У меня есть следующий RegEx для синтаксического анализа ISIN из фондов, активов, и т.д .. (2 символа следует 10 цифр и символы)RegEx для ISIN, по крайней мере, 1 номер

([A-Z]{2})([A-Z0-9]{10}) 

Но это также означает, например, такое слово ABCDEFGHIJKL, но это не настоящий ISIN. Определение кодов ISIN здесь: WIKI

Так некоторые примеры US45256BAD38, US64118Q1076, XS0884410019. Каким будет правильный RegEx для их поиска, без совпадений, таких как ABCDEFGHIJKL?

Возможно, у RegEx есть хотя бы одно число?

ответ

0

Вы можете использовать регулярное выражение опережения:

\b([A-Z]{2})((?![A-Z]{10}\b)[A-Z0-9]{10})\b 

RegEx Demo

(?![A-Z]{10}\b) является негативным опережением, что не получится матч, если все 10 символов являются буквами после первых 2-х символов.

+0

Спасибо! Это отлично работает в демо, но я использую его в PLSQL с REGEXP_SUBSTR, и там он терпит неудачу. Знаете ли вы, что REGEXP_SUBSTR не поддерживает lookaheads? – ZerOne

+0

Хм, вы не упомянули об этом. Я не уверен, поддерживает ли регулярное выражение Oracle lookahead. Проверьте документацию. – anubhava

+1

Да, я думал, что это не проблема для Oracle, но на самом деле Oracle не поддерживает lookahead и lookbehind. Вы ответили на мой вопрос, так спасибо! Я просто задал неправильный вопрос – ZerOne