在oracle中使用正则表达式提取子字符串
Extract substring with regexp in oracle
我有这个表情
(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)
提取自
CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20
我需要提取物 'VRD LOS ARBOLES PT'
但是 REGEXP_SUBSTR return 'VRD LOS ARBOLES PT 20 '
请帮我解决这个问题
REGEXP_SUBSTR('CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20','(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)' )
您可能正在寻找这样的东西:
with
inputs as (
select 'CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20' address from dual
)
select regexp_substr(address,
'(CONJ|ADL|ALD|ALM|ATR|VRD).*?(TERPLN|SUITE|AGP|ALM|PT|$)') token
from inputs
;
TOKEN
---------------------
VRD LOS ARBOLES PT
关键是交替之间的内容 - .*?
在这种情况下。
但是,请注意这是一种 危险的 方法 - 如果街道名称(或其他名称)实际上包含子字符串 PT
怎么办?
VRD 康普顿谷
搜索将 return VRD COMPT
问题出在您的数据模型上,而不是您对此类数据使用的特定查询。也许你可以要求在最后的交替之前有一个space;但即便如此,您也会在
这样的输入中得到错误的答案
VRD 托勒密花园
我有这个表情
(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)
提取自
CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20
我需要提取物 'VRD LOS ARBOLES PT'
但是 REGEXP_SUBSTR return 'VRD LOS ARBOLES PT 20 '
请帮我解决这个问题
REGEXP_SUBSTR('CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20','(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)' )
您可能正在寻找这样的东西:
with
inputs as (
select 'CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20' address from dual
)
select regexp_substr(address,
'(CONJ|ADL|ALD|ALM|ATR|VRD).*?(TERPLN|SUITE|AGP|ALM|PT|$)') token
from inputs
;
TOKEN
---------------------
VRD LOS ARBOLES PT
关键是交替之间的内容 - .*?
在这种情况下。
但是,请注意这是一种 危险的 方法 - 如果街道名称(或其他名称)实际上包含子字符串 PT
怎么办?
VRD 康普顿谷
搜索将 return VRD COMPT
问题出在您的数据模型上,而不是您对此类数据使用的特定查询。也许你可以要求在最后的交替之前有一个space;但即便如此,您也会在
这样的输入中得到错误的答案VRD 托勒密花园