正则表达式 substr,起始位置位于字符串 PL/SQL 的末尾

Posted

技术标签:

【中文标题】正则表达式 substr,起始位置位于字符串 PL/SQL 的末尾【英文标题】:Regexp substr with start position at the end of the string PL/SQL 【发布时间】:2018-11-17 06:54:39 【问题描述】:

我有这样的字符串:

WORK 123 John Smith

10.01.D 5132 3330 Selena Amirez

300 TK30 000 Edvard Ramirez

最后我只想写出名字。我有这样的代码:

regexp_substr(string, '([0-9])( +)(.*)', 1, 1, 'i', 3))

但它只适用于第一行,其中只有一个数字。我的想法是从头开始写作,因为名字总是在最后。所以我想写出名字,起始位置总是最后一个数字的最后一个数字。

所以我想看到的是:

John Smith

Selena Amirez

Edvard Ramirez

提前谢谢你。

【问题讨论】:

【参考方案1】:

这可能是一种方式:

select regexp_substr(str, '([0-9]+ )([^0-9]*$)', 1, 1, 'i', 2)
from (
    select 'WORK 123 John Smith' str from dual union
    select '10.01.D 5132 3330 Selena Amirez' from dual union
    select '300 TK30 000 Edvard Ramirez' from dual
)

给出:

Selena Amirez                                    
Edvard Ramirez                                   
John Smith 

这将获取字符串的非数字 rigt 部分($ 是字符串的结尾),其后跟一个数字部分和一个空格。

【讨论】:

非常感谢!我需要这个:)【参考方案2】:

另一种选择:

SQL> with test (col) as
  2    (select 'WORK 123 John Smith'             from dual union
  3     select '10.01.D 5132 3330 Selena Amirez' from dual union
  4     select '300 TK30 000 Edvard Ramirez'     from dual
  5    )
  6  select col, trim(regexp_substr(col, '(\D)+$')) result
  7  from test;

COL                             RESULT
------------------------------- -------------------------------
10.01.D 5132 3330 Selena Amirez Selena Amirez
300 TK30 000 Edvard Ramirez     Edvard Ramirez
WORK 123 John Smith             John Smith

SQL>

【讨论】:

以上是关于正则表达式 substr,起始位置位于字符串 PL/SQL 的末尾的主要内容,如果未能解决你的问题,请参考以下文章

将有逗号的字符串拆解

Oracle分割字符串 REGEXP_SUBSTR用法

SQL 基础正则表达式(二十三)

Lua 正则表达式

Python 正则表达式

shell- 字符串处理 扩展的脚本技巧 正则表达式