regex 在Java中为我的错误日志使用正则表达式

yrwegjxp  于 2023-05-08  发布在  Java
关注(0)|答案(3)|浏览(131)

我尝试使用正则表达式来解析文本如下:

'''ErrorID:  951574305
Time:     Mon Apr 25 16:01:34 CEST 2011
URL:      /documents.do
HttpCode: null
Error:    class java.lang.NullPointerException: null'''

其中关键字**错误ID:,Time:,URL:**总是相同的,我需要搜索它们。如何解析此文本?

ffdz8vbo

ffdz8vbo1#

import re
re.findall("ErrorID:\s+(.*)", text)
# ['951574305']
re.findall("Time:\s+(.*)", text)
# ['Mon Apr 25 16:01:34 CEST 2011']
re.findall("URL:\s+(.*)", text)
# ['/documents.do']

正则表达式是这样工作的:它匹配ErrorID:(或其他分隔符)加上一些空格,加上字符串的其余部分,直到字符串的换行符/结尾。然后它返回空白后面的“something”。此外,结果将是一个列表,其中您将需要第一项。可以有其他的策略来找到你需要的东西,但我发现这是最合适的。

5tmbdcev

5tmbdcev2#

如果您的实现支持命名组…

/ErrorID:\s+(?<ID>.*)\nTime:\s+(?<Time>.*)\nURL:\s+(?<URL>.*)/g

然后可以按名称引用它们。
否则按索引

/ErrorID:\s+(.*)\nTime:\s+(.*)\nURL:\s+(.*)/g

ID为$1,时间为$2,URL为$3。

bogh5gae

bogh5gae3#

如果你需要字符串中的所有这些,但不知道它们在哪里,可以使用lookaheadAssert:
(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)

相关问题