正则表达式不捕获换行符

regex not capturing newline

我正在尝试使用正则表达式解析日志文件。日志看起来像这样:

2022-04-01 00:00:00.0000|DEBUG|LOREM:LOREM|IPSUM:LOREM:LOREMIPSUM Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel placerat sapien. Suspendisse interdum est nulla, ac interdum sem pellentesque vel. Ut condimentum nisl ipsum (Failed:1/Total:5) [10.0000 ms].
2022-04-01 00:00:00.0000|DEBUG|LOREM:IPSUM|lorem ipsum \SOME-PATH[Lorem Ipsum] (ID:000000-0000-0000-0000). Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel placerat sapien. Suspendisse interdum est nulla, ac interdum sem pellentesque vel. //line return here
Ut condimentum nisl ipsum.
2022-04-01 00:00:00.0000|DEBUG|LOREM:IPSUM|lorem ipsum \SOME-PATH[Lorem Ipsum] (ID:000000-0000-0000-0000). Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel placerat sapien. Suspendisse interdum est nulla, ac interdum sem pellentesque vel. //line return here
Ut condimentum nisl ipsum.

这是我试过的方法(正则表达式 101 https://regex101.com/r/RoDU5L/1 上的实时版本)

^(?<timestamp>^[\d-]+\s[\d:.]+)\|DEBUG\|(.*?)?\r?$|.*?(?<path>\.*\]\s)(?<description>.*)+$ /gm

问题是它没有使用最后一行“Ut condimentum nisl ipsum”。

感谢您的帮助

您可以使用

^(?<timestamp>^[\d-]+\s[\d:.]+)\|DEBUG\|(.*(?:\r?\n(?![\d-]+\s[\d:.]+\|).*)*)|.*?(?<path>\.*\]\s)(?<description>.*)+$

参见regex demo

.*(?:\r?\n(?![\d-]+\s[\d:.]+\|).*)* 部分现在匹配

  • .* - 除换行字符外的任何零个或多个字符,尽可能多
  • (?:\r?\n(?![\d-]+\s[\d:.]+\|).*)* - 零次或多次出现
    • \r?\n(?![\d-]+\s[\d:.]+\|) - CRLF 或 LF 行结束现在紧跟 datetime-like 模式和
    • 之后的 |
    • .* - 除换行字符外的任何零个或多个字符,尽可能多。