Запрос Oracle на Regexp_substr

Я пытаюсь использовать Regexp_substr для извлечения номера единицы из поля свойств. Ниже приведен запрос.

regexp_substr(PROPERTY,'(#)[^\S]+ ')

Хотя некоторые результаты верны, но другие вернулись, как показано ниже:

#05-08 DOVER PARKVIEW

Могу я узнать, что мне нужно сделать, чтобы опустить все алфавиты или формулировки? Спасибо.


person Adrian Tan    schedule 23.05.2017    source источник
comment
Итак, что такое входная строка и какой результат вам нужен? Кстати, это Oracle 11g/12g или старше?   -  person Wiktor Stribiżew    schedule 23.05.2017
comment
А что вы планировали сопоставить с [^\S]?   -  person Wiktor Stribiżew    schedule 23.05.2017
comment
Я пытаюсь сопоставить только номер устройства, то есть # 05-08. Но это всего лишь один формат, есть и другие номера устройств, которые выглядят как #19-1215 или #06-143.   -  person Adrian Tan    schedule 23.05.2017
comment
Хорошо, попробуй regexp_substr(s, '#(\d+-\d+)', 1, 1, NULL, 1)   -  person Wiktor Stribiżew    schedule 23.05.2017
comment
Спасибо! Это работает как чудо!   -  person Adrian Tan    schedule 23.05.2017
comment
Пожалуйста, рассмотрите возможность принятия ответа, нажав ✓ слева (см. Как принять ответы SO) и проголосовать, если мой ответ окажется для вас полезным (см. Как проголосовать за переполнение стека?).   -  person Wiktor Stribiżew    schedule 23.05.2017


Ответы (1)


Шаблон [^\S] соответствует любому символу, кроме \ и заглавной буквы S.

Вам нужно захватить 1+ цифру, за которой следует -, и снова 1+ цифру после # и извлечь эту часть совпадения только с помощью

regexp_substr(PROPERTY, '#(\d+-\d+)', 1, 1, NULL, 1)

Последний аргумент 1 указывает механизму регулярных выражений извлечь содержимое группы захвата с идентификатором 1 (в любом случае это единственная группа захвата в шаблоне).

  • # - буквальное #
  • (\d+-\d+) - Capturing group 1 matching:
    • \d+ - 1 or more digits
    • - - дефис
    • \d+ - 1 или более цифр.

См. онлайн-демонстрацию:

select regexp_substr('#05-08 DOVER PARKVIEW', '#(\d+-\d+)', 1, 1, NULL, 1) as RESULT from dual

введите здесь описание изображения

person Wiktor Stribiżew    schedule 23.05.2017