Scala拆分与正则表达式删除字段而不是拆分

时间:2016-05-20 19:10:43

标签: regex scala

我正在尝试解析一些看起来像这样的日志:

2016-05-16 04:15:16,842 INFO  org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: <PERFLOG method=get_database from=org.apache.hadoop.hive.metastore.RetryingHMSHandler>
2016-05-16 04:15:16,842 INFO  org.apache.hadoop.hive.metastore.HiveMetaStore: [pool-3-thread-194]: 154: get_database: newcluster

我只是搞乱如何分割这个文件以及我迄今为止所做的每一次尝试:

val split = hive.map(x=>x.split(":?(\\d{4})")).take(1)

删除前4位数而不是将它分成4位数?

split: Array[Array[String]] = Array(Array("", -05-13 00:37:50,808 INFO  org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: </PERFLOG method=drop_table_with_environment_context start=, "", "", 5 end=, "", "", 8 duration=73 from=org.apache.hadoop.hive.metastore.RetryingHMSHandler threadId=154 retryCount=0 error=false>))

为什么删除该字段?我有一个更复杂的正则表达式我已经构建但只删除了所有内容......

2 个答案:

答案 0 :(得分:0)

那么让参数拆分成"[- :,]"?这给你带来了什么?

答案 1 :(得分:0)

以下是如何创建提取日期模式的正则表达式:

val pattern = """\d{4}-\d{2}-\d{2}""".r

val log = """2016-05-16 04:15:16,842 INFO  org.apache.hadoop.hive.ql.log.PerfLogger: [pool-3-thread-194]: <PERFLOG method=get_database from=org.apache.h"""

pattern.findFirstIn(log)
res: Option[String] = Some(2016-05-16)

遵循此模式应该可以帮助您解析所需日志中的任何元素。

有关更多示例,请参阅here