正则表达式 - 在逗号之间的序列中捕获下划线之间的数字

Regular expression - capture number between underscores within a sequence between commas

我在数据库 table 中有一个字段,格式为:

111_2222_33333,222_444_3,aaa_bbb_ccc

这是整个领域统一的格式。三个下划线分隔的数值,一个逗号,三个下划线分隔的数值,另一个逗号,然后三个下划线分隔的文本值。中间没有空格

我想从第二个数字序列中提取中间值,在上面的例子中我想得到 444

在我继承的 SQL 查询中,使用的正则表达式是 ^.,(\d+)_.$ 但这似乎没有任何作用。

我试图确定第一个逗号、后面的第一个数字和下面的下划线 ,222_ 作为起点,然后从那里得到下一个没有 _ 的数字

这个 (,\d*_)(\d+[^_]) 选择 ,222_444 并且是我得到的最接近的

我们可以尝试将 REGEXP_REPLACE 与捕获组一起使用:

SELECT
    REGEXP_REPLACE( 
        '111_2222_33333,222_444_3,aaa_bbb_ccc',
        '^[^,]+,[^_]+_(.*?)_[^_]+,.*$',
        '') AS num
FROM yourTable;

这是一个演示,显示上面的正则表达式的第一个捕获组包含您想要的数量。

Demo