Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式用空格替换一个字符_Regex_Amazon S3_Amazon Athena - Fatal编程技术网

Regex 正则表达式用空格替换一个字符

Regex 正则表达式用空格替换一个字符,regex,amazon-s3,amazon-athena,Regex,Amazon S3,Amazon Athena,我在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}) (?[0-9]{4}-[0-9]{2}-[0-9]{2})(?:T)(?[0-9]{2}:[0-9]{2}:[0-9]{2}) 输出:2021-04-04T12:21:29 我试图用一个空

我在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})
(?[0-9]{4}-[0-9]{2}-[0-9]{2})(?:T)(?[0-9]{2}:[0-9]{2}:[0-9]{2})
输出:
2021-04-04T12:21:29

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

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


谢谢您的帮助。

如果您想用空格替换
T
replace(列名,'T','')
。如果您想从ISO 8601字符串中获得
时间戳
来自\u iso8601\u时间戳(列名称)

您使用什么工具进行匹配和替换?我在AWS Athena create external table语句中使用正则表达式输入。不捕获并不意味着“不匹配”。捕获只是将匹配的一部分保存在单独的内存缓冲区中。您需要访问组,或替换。确定,但替换只能在初始正则表达式运行后进行?是否可以在替换中使用两个捕获组,如
$1$2
?有2个捕获组,而不是3个,因为这部分
(?:T)
可以写成
T
。是的,但是替换函数只能在正则表达式完成后运行。替换可以在正则表达式中完成吗?您能详细说明一下这是什么意思吗?