我的示例数据集:
Loaded: mismatch (No such file or directory)
Loaded: not-found ()
Loaded: error (Reason:No such file or directory)
Loaded: error (Reason: No such file or directory)
Loaded: mystery
我的正则表达式测试(逐行阅读):
re.findall("[Loaded: ](\S*) \([Reason: ]?(.*)\)", line)
我分别得到了:
[('mismatch', 'No such file or directory')]
[('not-found', '')]
[('error', 'eason:No such file or directory')]
[('error', 'eason: No such file or directory')]
第一个和第二个列表没问题。
但第三和第四不是,它缺少第五。
如何解决这个问题?
答案 0 :(得分:1)
re.findall(r"Loaded:\s*(\S*)\s*(?:\((?:Reason:\s*)?(.*)\))?", line)
试试这个。
答案 1 :(得分:1)
不确定这是否是您所需要的,但它与所有相匹配 你的测试字符串正确。
组1是加载的消息,组2是原因。
# Loaded:\s+(\S+)(?:\s+\((?:Reason:\s*)?([^)]*)\))?
Loaded: \s+
( \S+ ) # (1)
(?:
\s+
\(
(?: Reason: \s* )?
( [^)]* ) # (2)
\)
)?