流利的正则表达式:在单个组

时间:2017-07-12 03:54:46

标签: regex elasticsearch fluentd

我正在尝试从以下字符串中删除字段:

|null|23|2017-07-11T19:03:40.511|Test|PageUnque#MasterCache|123450000||

解析字符串后,结果应如下:

type: null id: 23 message: 2017-07-11T19:03:40.511|Test|PageUnque#MasterCache code: 123450000

我尝试使用下面的Regex,但它没有按预期工作。

^\|(?<type>.*?)\|(?<id>.*?)\|(?<message>.[^\#]*)\|(?<code>.*?)\|$

1 个答案:

答案 0 :(得分:1)

如果有更多关于预期在每个领域的信息的例子或更多细节,将会有所帮助。我在你的正则表达式中遇到的主要问题是它似乎你想捕获“2017-07-11T19:03:40.511 | Test | PageUnque #MasterCache”,但你不允许消息捕获组中的'#'字符

(?<message>.[^\#]*)

相反,这就是我所做的。我会注意到我假设代码只包含数字。 https://regex101.com/r/urC2rj/1

^\|(?<type>.*?)\|(?<id>.*?)\|(?<message>.*)\|(?<code>[0-9]+)\|\|$

我没有在正则表达式中改变它,而是使用“。*?”可能有点冒险,因为它允许你的正则表达式捕获很多东西。根据您的数据,它可能重要也可能不重要。