正则表达式 - 如何从列表中选择第一项

Posted

技术标签:

【中文标题】正则表达式 - 如何从列表中选择第一项【英文标题】:regex - how to select first item from list 【发布时间】:2018-03-19 23:53:13 【问题描述】:

帮助!我对正则表达式一无所知,但我需要在我的 sql 查询(amazon redshift)中使用它。我有这样的列表:[1245,2324,4433] 我想获得第一个数字(1245)。我该怎么做?

问候

【问题讨论】:

试试regexp(col, '\\d+') 【参考方案1】:
select (regexp_matches('[1245,2324,4433]', '\d+'))[1]

说明:regexp_matches 从字符串中选择第一个数字 (\d+),然后从返回的集合中选择第一个(也是唯一的)元素。

如果在所有 0 行中都找不到数字。

对于 RDS 来说

regexp_substr('[12456,232466,4433]','\\d+')

参考资料:

https://www.postgresql.org/docs/current/static/functions-string.html https://docs.aws.amazon.com/redshift/latest/dg/REGEXP_SUBSTR.html https://docs.aws.amazon.com/redshift/latest/dg/pattern-matching-conditions-posix.html

【讨论】:

我收到错误:[42883][500310] [Amazon](500310) 无效操作:函数 regexp_matches("unknown", "unknown") 不存在; java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: [Amazon](500310) 无效操作:函数 regexp_matches("unknown", "unknown") 不存在; @monika_w091 然后尝试regexp_substr 而不是docs.aws.amazon.com/redshift/latest/dg/REGEXP_SUBSTR.html select (regexp_substr('[1245,2324,4433]', '\d+')), 结果:空行 select (regexp_substr('[12456,232466,4433]','[^,]*')),结果:[12456,如何删除“[”? @monika_w091 尝试改用\\d+ 正则表达式【参考方案2】:

你可以试试这个:

select replace(split_part('[1245,2324,4433]',',',1),'[','')

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review @GreatBigBore 你是什么意思?我不需要澄清,这个 sn-p 解决了从 Amazon Redshift 上提供的字符串中获取第一个元素的问题 该消息由审核系统自动生成;并非所有这些都适用于您。主要问题是真正的答案不是从“你可以尝试”开始的。此外,系统总是怀疑简短的答案,这会吸引更多的评论者,这可能会删除你的问题。如果您能想到要添加的任何有用信息,请添加。但不是填充物!祝你好运。

以上是关于正则表达式 - 如何从列表中选择第一项的主要内容,如果未能解决你的问题,请参考以下文章

从 URL 列表中选择文件路径的正则表达式

正则表达式从列表中选择第 n 个值,允许空值

列表从另一个列表中选择正则表达式

如何在 MySQL 选择查询中编写正则表达式?

如何使用正则表达式从列表中获取日期? [复制]

如何选择匹配多个正则表达式的文件列表?