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

时间:2011-04-25 18:15:38

标签: regex

我正在尝试使用正则表达式来解析这样的文本:

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

关键字错误ID:,时间:,网址:始终相同,我需要搜索它们。我该如何解析这个文本?

4 个答案:

答案 0 :(得分:1)

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:(或其他分隔符)加上一些空格,加上字符串的其余部分,直到字符串的换行符/结尾。然后它返回空格后面的“东西”。此外,结果将是您需要第一个项目的列表。 可以有其他策略来找到你需要的东西,但我发现这是最合适的。

答案 1 :(得分:0)

这不是您正在寻找的答案,但这里有两个您可能会觉得有用的网站:

java regex tester

java Script regex tester

答案 2 :(得分:0)

如果你在字符串中需要所有这些并且不知道它们在哪里并且可以使用先行断言:

(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)

答案 3 :(得分:0)

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

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

然后您可以按名称引用它们。见http://refiddle.com/10w

否则按索引

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

ID为1美元,Time为2美元,URL为3美元。 http://refiddle.com/10x