正则表达式 Oracle Pl/Sql
Regular Expression Oracle Pl/Sql
我有以下
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),它们通常以下列形式出现'Type Name',例如 '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'。但是问题是我在没有内部类型的情况下也需要链的结束作为停止条件。
拜托,我需要这方面的帮助。
谢谢
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
不需要行尾字符
将字符串结尾 $
作为类型名称后缀之一添加到您的正则表达式中:
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;
我有以下
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),它们通常以下列形式出现'Type Name',例如 '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'。但是问题是我在没有内部类型的情况下也需要链的结束作为停止条件。
拜托,我需要这方面的帮助。 谢谢
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
不需要行尾字符
将字符串结尾 $
作为类型名称后缀之一添加到您的正则表达式中:
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;