这个问题以前可能有人问过,但这些与我的情况不符。我已经试过了其中的大部分,但没有一个解决方案是有帮助的。在
所以,问题来了。我有一个包含大量行的文本文件。
以下是文件示例:
yyyyyy=xxxx
yyyyyy=xxxxxxxx
Sun Oct 22 15:19:23 PDT 2017
calling sequenc node
++ entering node aaa ( )
Sun Oct 22 15:19:23 PDT 2017
lines xxxxxxxx
calling wroot.bat
++ entering node bbb (xxx )
Sun Oct 22 15:19:23 PDT 2017
xxxxxxxxxxxxxx
calling bsod.bat
xaaaaa
bbbbb
tttttt
bbb completed successfully
-- exiting node bbb
++ entering node ccc (yyyy )
Sun Oct 22 15:19:35 PDT 2017
xxxxxxxxxxxxxxxxx
calling wpretest.bat
现在,我想从调用部分(包括)提取行到位于已完成成功行之上的行。另外,我想提取只有当它有一个以++开头的行。的编号。主叫线路不同。它可能有一个空白,后面有2行或更多行。如果后面没有行,我只想提取调用行。如果在下一行中成功完成了,那么我还想提取单个主叫行。如果在调用行和成功完成之间还有其他行,我想提取所有这些行。在
下面是我尝试过的与正则表达式一起使用的代码(似乎不起作用)
^{pr2}$以下是预期输出:
calling wroot.bat
calling bsod.bat,
xaaaaa,
bbbbb,
tttttt
calling wpretest.bat
如果您想要一个
regex
这应该可以:导致:
^{pr2}$分解正则表达式
所以你可以玩它:
(?<=\n)calling
-如果单词“calling”紧跟在换行符之后,请查找它。在.*
继续不贪婪地匹配任何内容直到您按
(?=...|...|...)
中的一个(|
表示或):a.
\n[^\n]*completed succ[^\n]*\n
包含“已完成的成功”的行。这本质上是一个换行符,在“completed success”之前,可以使用任意多个非换行符,更多的字符,最后是一个新行。可能在completed succ
部分结束,因为我不关心匹配这行的其余部分,现在我考虑一下。在b.
\n\+\+
以“++”开头的换行符。在c.
\s*\Z
任何数量的空格字符(\n,“,\t等),直到整个字符串\Z
结束。我会考虑使用一个循环,比如:
如果行以
calling
开头,可能会错误检查inside==False
,以防万一。在相关问题 更多 >
编程相关推荐