正则表达式不捕获换行符
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 模式和 之后的 |
.*
- 除换行字符外的任何零个或多个字符,尽可能多。
我正在尝试使用正则表达式解析日志文件。日志看起来像这样:
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 模式和 之后的 .*
- 除换行字符外的任何零个或多个字符,尽可能多。
|