我正在为公司的 S3 存储桶设置 ETL 流程,以便我们可以跟踪我们的使用情况,但在分解 S3 日志文件的列时遇到了一些麻烦,因为 Amazon 使用空格、双引号和方括号来分隔列。
我发现了这个正则表达式:[^\\s\"']+|\"([^\"]*)\"|'([^']*)'在这个SO帖子上:Regex for splitting a string using space when not displayed by 单引号或双引号,这让我非常接近。我只需要帮助调整它以忽略单引号,并忽略“[”和“]”之间的空格
以下是我们的一个文件中的示例行:
dd8d30dd085515d73b318a83f4946b26d49294a95030e4a7919de0ba6654c362 ourbucket.name.config [31/Oct/2011:17:00:04 +0000] 184.191.213.218 - 013259AC1A20DF37 REST.GET.OBJECT ourbucket.name.config.txt "GET /ourbucket.name.config.txt HTTP/1.1" 200 - 325 325 16 16 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6" -
Run Code Online (Sandbox Code Playgroud)
这是格式定义:http://s3browser.com/amazon-s3-bucket-logging-server-access-logs.php
任何帮助,将不胜感激!
编辑:响应 FaileDev,输出应该是两个方括号之间包含的任何字符串,例如 [foo bar],两个引号,例如“foo bar”或空格,例如 foo bar (其中 foo 和 bar 都将单独匹配。我已将我提供的示例行中的每个匹配项分解为以下块中自己的行:
dd8d30dd085515d73b318a83f4946b26d49294a95030e4a7919de0ba6654c362
ourbucket.name.config
[31/Oct/2011:17:00:04 +0000]
184.191.213.218
-
013259AC1A20DF37
REST.GET.OBJECT
ourbucket.name.config.txt …Run Code Online (Sandbox Code Playgroud)