拆分并选择括号之间的文本

时间:2018-01-07 00:03:42

标签: regex powershell

我有一个包含如下内容的文件,但我只对某些信息感兴趣

[2018-01-06 18:52:00,376] INFO [workflow@xxx] - [com.app.gateway] size of [1] message
[2018-01-06 18:54:00,188] INFO [workflow@xxx] - [com.app.gateway] size of [3] message
[2018-01-06 18:55:00,140] INFO [workflow@xxx] - [com.app.gateway] size of [5] message

我想清理它并输出以下内容:

[2018-01-06 18:52:00]  [1]
[2018-01-06 18:54:00]  [3]
[2018-01-06 18:55:00]  [5]

我正在考虑使用拆分但是如何在括号之间拆分?

谢谢!

1 个答案:

答案 0 :(得分:0)

查看您提供的示例输入,似乎您希望方括号中的数据仅包含数字/时间戳。 此解决方案仅在整个文件中存在此假设时才有效。

这是一个你可以尝试的正则表达式:

^(\[[0-9 :,-]+]).*(\[[0-9 :,-]+]).*$

将每个匹配项替换为$1 $2

Click for Regex Demo

<强>解释

  • ^ - 断言字符串的开头
  • (\[[0-9 :,-]+]) - 匹配[后跟1次出现(数字或:,-或空格然后是]并将其捕获为第1组
  • .* - 贪婪地匹配任何字符的出现次数
  • (\[[0-9 :,-]+]) - 匹配[后跟1次出现(数字或:,-或空格然后是]并将其捕获为第2组
  • .* - 贪婪地匹配任何字符的出现次数
  • $ - 断言字符串的结尾

<强>代码:

$var= "[2018-01-06 18:52:00,376] INFO [workflow@xxx] - [com.app.gateway] size of [1] message" 
$var = $var-replace "^(\[[0-9 :,-]+]).*(\[[0-9 :,-]+]).*$",'$1 $2'
$var

Click for Code Demo