Oracle 需要使用REGEXP\u SUBSTR提取文本-找不到正确的组合
以下是我的文本示例-我正在尝试获取TEXTPART3作为答案: TEXTPART1:TEXTPART2:TEXTPART3-TEXTPART4 我使用了TRIM(从REGEXP_SUBSTR('textstatementhere',':.+?-')开始的“:”),但它没有考虑到文本语句中的两个“:”和“-”,我得到了“TEXTPART2:TEXTPART3-” 有人能帮忙吗Oracle 需要使用REGEXP\u SUBSTR提取文本-找不到正确的组合,oracle,netsuite,Oracle,Netsuite,以下是我的文本示例-我正在尝试获取TEXTPART3作为答案: TEXTPART1:TEXTPART2:TEXTPART3-TEXTPART4 我使用了TRIM(从REGEXP_SUBSTR('textstatementhere',':.+?-')开始的“:”),但它没有考虑到文本语句中的两个“:”和“-”,我得到了“TEXTPART2:TEXTPART3-” 有人能帮忙吗 提前谢谢 利用REGEXP\u SUBSTR函数完成所有工作 使用子表达式,(\w),并引用它: WITH exmple
提前谢谢 利用REGEXP\u SUBSTR函数完成所有工作 使用子表达式,
(\w)
,并引用它:
WITH exmple AS (
SELECT
'TEXTPART1 : TEXTPART2: TEXTPART3 - TEXTPART4' txt
FROM
dual
)
SELECT
txt,
regexp_substr(txt, ': (\w*) -', 1, 1, NULL,
1)
FROM
exmple;
我看到您使用了
,而不是\w
。因为您选择了元字符,
(它表示除新行以外的所有字符(尽管如果将“n”设置为模式匹配修饰符,则可以包含该字符)),所以第二个冒号将被抛出到匹配集中
TEXTPART3包括哪些内容
可能您不需要元字符\w
(代表字母数字或下划线(u)字符)
您可以将其替换为不匹配的字符列表,以避免出现
问题:
[^::][/code>
该方法如下所示:
REGEXP_SUBSTR(txt),:([^:]*)-”,1,1,NULL,1)
最后,对于与此子表达式关联的量化器,我使用了*
,这意味着零个或多个匹配。我假设在某些情况下,此TEXTPART3可能没有匹配项。如果不是这样,我们可以使用+
这个问题有一个更有效的解决方案,只使用标准字符串函数:
with
sample_input (str) as (
select 'TEXTPART1 : TEXTPART2: TEXTPART3 - TEXTPART4' from dual
)
select substr(str, pos, instr(str, '-', pos) - pos - 1) as text_part_3
from (select str, instr(str, ':', 1, 2) + 2 as pos from sample_input)
;
TEXT_PART_3
-----------
TEXTPART3
为什么它必须是“带有REGEXP\u SUBSTR”?解决问题的方法通常不是问题需求的一部分。你的问题有一个没有正则表达式的更有效的解决方案。至少还有一个假设你没有提到:TEXTPART2字符串不包含前面有空格的破折号。类似这样的输入:ABC:DEF-GEH:TEXTPART3-TEXTPART4。也许这种模式在数据中是不可能的,但OP没有明确排除它。是的,同意。谢谢大家,REGEXP_SUBSTR(txt,,:([^:]*)-,1,1,NULL,1)解决了我的问题。。