我尝试使用正则表达式来解析文本如下:
'''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:**总是相同的,我需要搜索它们。如何解析此文本?
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”。此外,结果将是一个列表,其中您将需要第一项。可以有其他的策略来找到你需要的东西,但我发现这是最合适的。
ErrorID:
5tmbdcev2#
如果您的实现支持命名组…
/ErrorID:\s+(?<ID>.*)\nTime:\s+(?<Time>.*)\nURL:\s+(?<URL>.*)/g
然后可以按名称引用它们。否则按索引
/ErrorID:\s+(.*)\nTime:\s+(.*)\nURL:\s+(.*)/g
ID为$1,时间为$2,URL为$3。
bogh5gae3#
如果你需要字符串中的所有这些,但不知道它们在哪里,可以使用lookaheadAssert:(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)
(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)
3条答案
按热度按时间ffdz8vbo1#
正则表达式是这样工作的:它匹配
ErrorID:
(或其他分隔符)加上一些空格,加上字符串的其余部分,直到字符串的换行符/结尾。然后它返回空白后面的“something”。此外,结果将是一个列表,其中您将需要第一项。可以有其他的策略来找到你需要的东西,但我发现这是最合适的。5tmbdcev2#
如果您的实现支持命名组…
然后可以按名称引用它们。
否则按索引
ID为$1,时间为$2,URL为$3。
bogh5gae3#
如果你需要字符串中的所有这些,但不知道它们在哪里,可以使用lookaheadAssert:
(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)