【问题标题】:Regular expression - capture number between underscores within a sequence between commas正则表达式 - 在逗号之间的序列中捕获下划线之间的数字
【发布时间】:2020-01-15 12:57:10
【问题描述】:

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

111_2222_33333,222_444_3,aaa_bbb_ccc

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

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

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

我尝试识别第一个逗号、后面的第一个数字和以下下划线 ,222_ 用作起点,然后从那里得到下一个数字,后面没有 _

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

【问题讨论】:

  • 用您正在使用的数据库标记我们的问题。
  • 您需要使用数据库进行标记是因为每个数据库都有非常不同的字符串和正则表达式 API。
  • 如果你能够得到 ,222_444 ,只需删除第一组的第一个圆括号,你应该根据需要用 444 进行四舍五入 ,\d*(\d+[^])

标签: sql regex datagrip exasol


【解决方案1】:

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

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

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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多