RegEx 匹配有效日期 Presto
Posted
技术标签:
【中文标题】RegEx 匹配有效日期 Presto【英文标题】:RegEx matching a valid date Presto 【发布时间】:2021-06-09 10:55:32 【问题描述】:对于下表,我想从additional_info
string 中提取available from date
。我知道 Presto 中有一个 regexp_extract_all(string, pattern) 函数,但不太确定如何从字符串中提取日期。
仅供参考:
日期始终采用相同格式additional_info
列中只能有一个日期
additional_info
列中没有日期的行在日期列中为空
表格
product_id additional_info
325245 New, contact for more information, available from 01.01.2020
635255 Used, available from 06.11.2020
422632 New, contact for more information
所需的输出表
product_id available_date
325245 01.01.2020
635255 06.11.2020
422632
【问题讨论】:
(1)additional_info
看起来像一个字符串,而不是一个数组。 (2) 日期是否总是相同的格式? (3) 如果有多个日期或没有日期怎么办?
我已经编辑了我的帖子。日期始终采用相同的格式,如果只有一个日期或没有日期,则日期 col 为空
【参考方案1】:
如果您的日期始终采用这种格式,一个非常简单的解决方案可能是:
SELECT
product_id
, regexp_extract(additional_info, '(\d\d.\d\d.\d\d\d\d)')
FROM table
它将返回与您的捕获组匹配的第一个子字符串(betweenbrackets)
。
【讨论】:
【参考方案2】:正则表达式中的点表示任何字符。要在正则表达式中逐字匹配点,您需要用反斜杠 \.
屏蔽它
SELECT
product_id,
regexp_extract(additional_info, '(\d\d\.\d\d\.\d4)')
FROM table
如果您想允许不同的分隔符,而不仅仅是点,请使用字符类[]
。例如,点或破折号:
SELECT
product_id,
regexp_extract(additional_info, '(\d\d[.-]\d\d[.-]\d4)')
FROM table
【讨论】:
以上是关于RegEx 匹配有效日期 Presto的主要内容,如果未能解决你的问题,请参考以下文章
python 浮点正则表达式:匹配任何有效python浮点值的正则表达式。请参阅操作https://regex101.com/r/ObowxD/5