Регулярное выражение Oracle Pl / Sql - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующее

lvc_direccion := 'BL 93 IN 4 AP 401 PABLO VI II SEC';
lvc_Inmueble := REGEXP_SUBSTR (lvc_direccion, '(CONJ|ADL|ALD|ALM|APO|ATR|CAS|CEN|CLJ|CON|ESQ|FCA|TER|URB|VRD|AG|CA|CC|CD|ED|EX|HC|IN|OF|PJ|UN|UR|ZF|C){1}.*? ((TERPLN|SUITE|AGP|ALM|CEL|MLL|PAR|POR|POS|PRJ|SEC|AD|AL|AP|BG|BL|CA|CS|DP|DS|ED|EN|ET|GJ|GS|GT|HG|LC|LM|LT|MD|MJ|MN|MZ|OF|PA|PD|PH|PL|PN|PQ|PS|PT|PW|RP|SA|SC|SD|SL|SS|ST|TO|TZ|ZN|P)|.*)$');

Мне нужно, чтобы lvc_Inmueble был равен «IN 4 AP», но он показывает «IN 4 AP 401 PABLO VI II SEC».

Но lvc_direccion также может быть «ED 4F CON Las Flores Cinco» и должно быть получено «CON Las Flores Cinco».

У меня есть список адресов, и из них мне нужно извлечь тип свойства, типы которого (CONJ, ADL, ALD, ALM, APO, ATR, CAS, CEN, CLJ, CON, ESQ, FCA, TER, URB, VRD, AG, CA, CC, CD, ED, EX, HC, IN, OF, PJ, UN, UR, ZF, C), и они обычно имеют следующую форму «Имя типа», пример « URB La Tosa 'или' CA 34 ', проблема в том, что подстрока находится в пределах строки' CRA 30 15 52 URB La Tosa AP 42 'или' CRA 30 15 52 URB La Tosa 'или других цепочек таким же образом с различными тип имущества, я использую тип интерьера (TERPLN, SUITE, AGP, ALM, CEL, MLL, PAR, POR, POS, PRJ, SEC, AD, AL, AP, BG, BL, CA, CS, DP, DS, ED, EN, ET, GJ, GS, GT, HG, LC, LM, LT, MD, MJ, MN, MZ, OF, PA, PD, PH, PL, PN, PQ, PS, PT, PW, RP, SA, SC, SD, SL, SS, ST, TO, TZ, ZN, P) для условия остановки, поэтому я извлек «URB La Tosa AP». Но проблема в том, что мне также нужен конец цепи как условие остановки, когда нет внутреннего типа.

Пожалуйста, мне нужна помощь с этим. Спасибо

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Добавьте конец строки $ в качестве одного из суффиксов имени типа к своему регулярному выражению:

DECLARE
  lvc_direccion varchar2(200) := 'BL 93 IN 4 AP 401 PABLO VI II SEC';
  lvc_Inmueble  varchar2(2000);
  p_prefixes    VARCHAR2(500) := 'CONJ|ADL|ALD|ALM|APO|ATR|CAS|CEN|CLJ|CON|ESQ|FCA|TER|URB|VRD|AG|CA|CC|CD|ED|EX|HC|IN|OF|PJ|UN|UR|ZF|C';
  p_suffixes    VARCHAR2(500) := 'TERPLN|SUITE|AGP|ALM|CEL|MLL|PAR|POR|POS|PRJ|SEC|AD|AL|AP|BG|BL|CA|CS|DP|DS|ED|EN|ET|GJ|GS|GT|HG|LC|LM|LT|MD|MJ|MN|MZ|OF|PA|PD|PH|PL|PN|PQ|PS|PT|PW|RP|SA|SC|SD|SL|SS|ST|TO|TZ|ZN|P';
  p_regexp      VARCHAR2(1100) := '(' || p_prefixes || ').*?(' || p_suffixes || '|$)';
BEGIN
  lvc_Inmueble  := REGEXP_SUBSTR( lvc_direccion, p_regexp );

  DBMS_OUTPUT.PUT_LINE( lvc_Inmueble );
END;
0 голосов
/ 16 января 2019
declare
lvc_direccion varchar2(200);
lvc_Inmueble  varchar2(2000);
begin
lvc_direccion := 'BL 93 IN 4 AP 401 PABLO VI II SEC';
lvc_Inmueble := REGEXP_SUBSTR (lvc_direccion, '(CONJ|ADL|ALD|ALM|APO|ATR|CAS|CEN|CLJ|CON|ESQ|FCA|TER|URB|VRD|AG|CA|CC|CD|ED|EX|HC|IN|OF|PJ|UN|UR|ZF|C){1}.*?((TERPLN|SUITE|AGP|ALM|CEL|MLL|PAR|POR|POS|PRJ|SEC|AD|AL|AP|BG|BL|CA|CS|DP|DS|ED|EN|ET|GJ|GS|GT|HG|LC|LM|LT|MD|MJ|MN|MZ|OF|PA|PD|PH|PL|PN|PQ|PS|PT|PW|RP|SA|SC|SD|SL|SS|ST|TO|TZ|ZN|P))');


dbms_output.put_line( lvc_Inmueble);
end;

ВЫХОД: В 4 AP

Символ конца строки не нужен

...