我正在尝试根据匹配表达式拆分字符串。请注意,这包括换行符。
以下是我的查询
with base aS(
select
'sam s123 565 q2#
nicole s1257 546 q4#
mary s568 545' str1
from dual
)
select regexp_substr(str1, '[^q[:digit:]]#+', 1, level, 'm') as split
from base
connect by level <= regexp_count(str1, '[^q[:digit:]]#+')
我想看到返回的行为:
sam s123 565
nicole s1257 546
mary s568
谢谢
答案 0 :(得分:0)
将正则表达式更改为此。
(.?+) -- any one or more characters. Put this in brackets as first subexpression
q -- letter q
\d+ -- one or more digits
# -- character #
并在REGEXP_SUBSTR函数中再包含一个paraemter,以仅提取第一个子表达式。使用TRIM删除空格。
WITH base AS (SELECT 'sam s123 565 q2#
nicole s1257 546 q4#
mary s568 545' str1 FROM DUAL)
SELECT TRIM (REGEXP_SUBSTR (str1,
'(.?+)q\d+#',
1,
LEVEL,
'm',
1 --first subexpression
)
)
AS split
FROM base
CONNECT BY LEVEL <= REGEXP_COUNT (str1, '(.?+)q\d+#');
输出:
split
-------------
sam s123 565
nicole s1257 546
由于您的第三行没有匹配的模式,因此不会返回该模式。