正则表达式 - 在逗号之间的序列中捕获下划线之间的数字
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;
这是一个演示,显示上面的正则表达式的第一个捕获组包含您想要的数量。
我在数据库 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;
这是一个演示,显示上面的正则表达式的第一个捕获组包含您想要的数量。