0

帮我修复我的正则表达式::

(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}'  )) as reg

我想得到结果:

'#time 52' 
'#time20'

如果我写:(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}' ))as reg

结果:#time20

如果我写:(REGEXP_SUBSTR(WORD, '#time\s[0-9]{1,2}' ))as reg

结果:#time 52

SQL查询:

SELECT
(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}'  )) as reg
FROM(
select
'text #time 52 texttexttext  #time20 text'  as WORD
from dual
)tabl

我该如何解决?谢谢你的帮助!

4

2 回答 2

0

如果我理解正确,这就是您想要的表达方式:

select REGEXP_SUBSTR(WORD, '#time\s*[0-9]{1,2}')

这将处理“#time”和数字之间的任意数量的空格(包括 0)。如果您最多需要一个,请使用?而不是*.

于 2017-06-25T02:04:40.580 回答
0

您是否正在寻找确切的子字符串#text,后跟可选空格,然后是一位或两位数字?然后'#text\s?\d{1,2}'会工作。?表示可选。

在这种情况下,您'#text\S\d{1,2}'是不正确的;它允许并且需要#text一个或两个数字之间的非空格字符。在您的示例中,它恰好匹配第一个数字,然后\d{1,2}匹配第二个数字,但这只是巧合。它也将匹配#text+00#text123。但它不会匹配#text4(如果后面没有一个或两个数字)。

于 2017-06-25T02:08:41.877 回答