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

怎么从文本中匹配日期格式并按此排序(Java)

我可以使这个Phone Validator Regex更有效吗?

RegEx - 匹配以冒号开头的子字符串

模式 ( regex ) 和找到的值之间的相似性

RegEx - 当版本号不是“1.0”时匹配 XML 声明 [关闭]