如何将某个字符串上方和下方的文本行与另一个字符串-RegEx

时间:2018-10-10 15:49:45

标签: python regex

如何使用Regex(python引擎)查找某个字符串,将其上方的几行以及其后的所有文本匹配,直到另一个指定的字符串?文本来自日志文件,几乎所有值都是动态的。我只找到一个常量字符串,它位于我要捕获的块的中间。 例如:

  

这是我不想匹配的一行文本。

     

这是我要匹配的一行文本。

     

这是我要匹配的一行文本。

     

要匹配的字符串

     

我要捕获的一行文本和数字以及其他标记abc123:/()&。

     

我要捕获的一行文本和数字以及其他标记abc123:/()&。

     

我要捕获的一行文本和数字以及其他标记abc123:/()&。

     

字符串以结尾但不能捕获

     

我不想要的文字

     

我不想要的文字

我可能还应该注意到,这些行中的大多数不仅可以包含文本,还可以包含数字和其他标点符号,我需要获取所有这些内容。如果有人能指出正确的方向,我将非常感谢您的帮助。谢谢!

编辑

这是一个日志文件中的真实示例,其中删除了某些值:

Tue Oct  0 00:00:00 UTC 0000
A:REDACTED# REDACTED 7/1/8 


==============================================================

Ethernet Interface

===============================================================

Description        : REDACTED

Interface          : 0/0/0                      Oper Speed       : 10 Gbps

Link-level         : Ethernet                   Config Speed     : N/A

Admin State        : up                         Oper Duplex      : full

Oper State         : up                         Config Duplex    : N/A

Physical Link      : Yes                        MTU              : 2004

Single Fiber Mode  : No                         Min Frame Length : 64 Bytes

IfIndex            : REDACTED                  Hold time up     : 90 seconds

我需要使用“以太网接口”作为文本来捕获除第一行和最后一行以外的所有内容。

我尝试过类似的操作:(?<=Ethernet Interface)(.*)(?=IfIndex) 但这仅涵盖了我需要的后半部分。如何在第一部分中添加?

1 个答案:

答案 0 :(得分:0)

尝试以下模式:(?=(.+\n){2}String to match)[\w\W]+(?=String to end on but NOT capture)

说明:它用(?=(.+\n){2}String to match) 向前看,这意味着确保后面紧跟着两行.+\n(在这里您需要指定字符串前多少行想要匹配)和String to match。如果为真,则开始匹配由[\w\W]+表示的每个字符,直到String to end but NOT capture后跟(?=String to end on but NOT capture)的位置为止(这是正向超前)。

Demo