c# - 用于拆分 Amazon S3 存储桶日志列的正则表达式?

标签 c# java regex ssis

我正在为我公司的 S3 存储桶设置一个 ETL 过程,以便我们可以跟踪我们的使用情况,我在分解 S3 日志文件的列时遇到了一些麻烦,因为 Amazon 使用空格、双引号和正方形用于分隔列的方括号。

我找到了这个正则表达式:[^\\s\"']+|\"([^\"]*)\"|'([^']*)'所以帖子:Regex for splitting a string using space when not surrounded by single or double quotes这让我非常接近。我只需要帮助调整它以忽略单引号并忽略“[”和“]”之间的空格

这是我们的一个文件中的示例行:

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" -

这是格式定义:http://s3browser.com/amazon-s3-bucket-logging-server-access-logs.php

如有任何帮助,我们将不胜感激!

编辑:响应 FaileDev,输出应该是包含在两个方括号之间的任何字符串,例如[foo bar],两个引号,例如“foo bar”或空格,例如foo bar(foo 和 bar 都将单独匹配。我已将我提供的示例行中的每个匹配项分解为以下 block 中它自己的行:

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" 
-

最佳答案

这是我为解析节点中的 s3 日志文件而编写的一个愚蠢的正则表达式:

/^(.*?)\s(.*?)\s(\[.*?\])\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(\".*?\")\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(.*?)\s(\".*?\")\s(\".*?\")\s(.*?)$/

正如我所说,这是“愚蠢的”——它在很大程度上依赖于他们不改变日志格式,并且每个字段不包含任何奇怪的字符。

关于c# - 用于拆分 Amazon S3 存储桶日志列的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961316/

相关文章:

c# - 如何创建 .rdlc 文件?

regex - Google BigQuery 可以做不区分大小写的 REGEXP_Match 吗?

java - 如何在 java 中导入 distcp 包?

java - 如何动态地将逗号分隔的字符串拆分为按第 n 个逗号拆分的字符串数组?

regex - PostgreSQL 查找字符串包含确切字符串的位置

c# - 如何使用 Sendkeys 发送 ctrl+x?

c# - 使用windows服务和c#检测USB驱动器插入和移除

c# - Enum.GetValues() 返回类型

Java - 显式转换为 char/short

java - Android 设备上已安装应用程序的拦截