Oracle 正则表达式仅匹配某些符号组合后的数字




我有一个字符串,大致看起来像:
XXXXXXXXX - 1234567 XXXXXXXXX,
其中 X 可以是数字、字符串或符号(<,>,. 或空格(。
我只需要在" - "之后提取这些数字。我尝试了以下方法:

select regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>','(- )[0-9]{1,7}')  from dual


我最终得到了- 1234567.如何摆脱'- '
提前感谢您

这应该适用于 Oracle 11g。

首先将捕获组放在您感兴趣的图案部分周围。由于您需要数字,因此请用捕获括号将[0-9]{1,7}括起来。

然后,将所有 6 个参数传递给 REGEXP_SUBSTR 函数,其中第 6 个参数表示要提取的捕获组数:

select regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>',' - ([0-9]{1,7})', 1,1,NULL,1) from dual

在这里,1,1,NULL,1的意思是:从位置 1 开始查找模式匹配,只针对第一个匹配项,没有特定的正则表达式选项,并返回组 1 的内容。

Linoff@Gordon想说的是:

select substr(regexp_substr('17.12.12 <XXXXXXXXXX> - 1234567 <XXXXXXXXXX>','(- )[0-9]{1,7}'), 3)  
from dual

结果中减去剩余的"-"。

最新更新