我需要选择字符串中的前X个单词,其中x可以是0-100之间的任意数字。是否有捷径可寻?我找到了以下示例来从字符串中选择前两个单词:
select regexp_replace('Hello world this is a test', '(\w+ \w+).*$','\1') as first_two
from dual
如何从字符串中选择前X个单词,其中X可以是0-100的数字?
答案 0 :(得分:3)
选择前四个单词:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s){4}).*', -- Change 4 to wanted number of words here!
'\1'
)
from dual;
修改强>
上述解决方案仅在单词由一个空格字符分隔时才有效。如果单词由一个或多个空格字符分隔,则\s
必须扩展为\s+
:
select
regexp_replace(
'Hello world this is a test etc',
'(((\w+)\s+){4}).*', -- Change 4 to wanted number of words here!
'\1'
)
from dual;
答案 1 :(得分:1)
此方法采用提取所需单词数的结果,然后将多个空格减少为一个:
select trim(regexp_replace(regexp_substr('Hello world this is a test etc', '(([^ ]*)( |$)*){3}'), ' +', ' '))
from dual;
编辑:这变得很难看,但在它周围缠绕了一个TRIM()来摆脱尾随空格(选择最后一个单词之后的空格)。
答案 2 :(得分:0)
这样做会,但它可能有点不优雅,取代" 2"用要查找的单词数量
select substr('this is a number of words',1,instr('this is a number of words',' ',1,2))
from dual
假设单词总是以空格结尾