【问题标题】:Regular Expression Replace One Character with Space正则表达式用空格替换一个字符
【发布时间】:2021-07-04 16:16:58
【问题描述】:

我在 AWS 日志文件中有一个时间戳,格式如下:2021-04-04T12:21:29Z

这个正则表达式会将时间戳分为三组:

(?<utcDate>[0-9]{4}-[0-9]{2}-[0-9]{2})(?:T)(?<utcTime>[0-9]{2}:[0-9]{2}:[0-9]{2})

输出:2021-04-04T12:21:29

我正在尝试将 T 替换为空格以创建有效的时间戳格式,以通过 AWS Athena 导入 SQL 时间戳列。我已经在我的 select 语句中使用 date_parse 将两个 utcDate 和 utcTime 组连接成一个时间戳。但我想在我的表中有一个时间戳,这样我就可以在 where 子句中查询时间戳。

当我将上述正则表达式组合成一个由子组组成的组时,即使在非捕获组中定义了 T,它仍然会返回。是否可以匹配一个字符 T 并用空格替换它?

感谢您的帮助。

【问题讨论】:

  • 你用什么工具来匹配和替换?
  • 我在我的 AWS Athena 创建外部表语句中使用正则表达式输入。
  • 非捕获并不意味着“不匹配”。捕获只是将匹配的一部分保存在单独的内存缓冲区中。您需要访问组或替换。
  • 好的,但是替换只能在初始正则表达式运行之后进行?
  • 你能像$1 $2那样在替换中使用2个捕获组吗?有 2 个捕获组而不是 3 个,因为这部分 (?:T) 可以写成 T

标签: regex amazon-s3 amazon-athena


【解决方案1】:

如果您想要将T 替换为空格:replace(column_name, 'T', ' ')。如果您想要 ISO 8601 字符串中的 TIMESTAMPfrom_iso8601_timestamp(column_name)

【讨论】:

  • 是的,但是那个replace函数只能在正则表达式完成后运行。可以在正则表达式中进行替换吗?
  • 你能详细说明你的意思吗?
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多