regex - 如何在 Oracle 11g regexp_substr 函数中使用两个定界符拆分字符串

标签 regex oracle11gr2 regexp-substr

我对使用定界符拆分字符串有疑问。

首先拆分基于 , 分隔符选择那些拆分的字符串应该基于 - 分隔符拆分

我的原始字符串:UMC12I-1234,CSM3-123,VQ, 预期输出:

UMC12I
CSM3
VQ

每个值都是行值

我试过这个选项

WITH fab_sites AS (
  SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '[^,]+', 1, LEVEL)) fab_site
  FROM dual
  CONNECT BY LEVEL <= regexp_count('UMC12I-1234,CSM3-123,VQ,', '[^,]+')+1
)
SELECT fab_site FROM   fab_sites WHERE fab_site IS NOT NULL

-- 根据,分隔符拆分

输出是:

UMC12I-1234
CSM3-123
VQ

如何获得预期的输出? (需要再次拆分 - 分隔符)

最佳答案

您可以使用 regexp_substr 提取 - 之前的“单词”

([^,-]+)(-[^,-]+)?

该模式将匹配并捕获第 1 组中除 - 之外的一个或多个字符,然后将匹配一个可选序列- 和除 - 之外的 1+ 个字符。

参见 regex demo .

在上面的正则表达式中使用此 regex_substr 行而不是您的行:

SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '([^,-]+)(-[^,-]+)?', 1, LEVEL, NULL, 1)) fab_site

参见 online demo

关于regex - 如何在 Oracle 11g regexp_substr 函数中使用两个定界符拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503292/

相关文章:

sql - Oracle 11g 第 2 版 : Can a sub-query be used within a create table check constraint?

sql-server - SQL Server 中的 REGEXP_SUBSTR 等效项

javascript - 返回 JavaScript 字符串中的哈希值和加号数

Python正则表达式搜索十六进制字节

oracle - 使用批量收集时设置 LIMIT 值

sql - 比较来自两个不同表的两列的逗号分隔值

Mysql 正则表达式搜索电话号码数组

javascript - 忽略两个正则表达式匹配之间的字符串

java - 如何使用正则表达式删除可能也在标记内的字符串末尾的 "."?

java - JTable Oracle Timestamp 列不显示