如何使用正则表达式多行模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用正则表达式多行模式相关的知识,希望对你有一定的参考价值。

我想从我的代码中匹配SYSTEM定义。系统块定义如下:

  "customized system name" = SYSTEM              
  TYPE             = PSZ   
  Other system definition
  FAN-SCHEDULE     = "S1 Sys1 (PSZ) Fan Sch"
   CONTROL-ZONE     = "EL1 South Perim Zn (G.S1)"
  ..

我的代码示例如下:

 $---- First SYSTEM block
 "EL1 Sys1 (PSZ) (G.C5)" = SYSTEM          
   TYPE             = PSZ    
  FAN-SCHEDULE     = "S1 Sys1 (PSZ) Fan Sch"
   CONTROL-ZONE     = "EL1 South Perim Zn (G.S1)"
   ..    

 $---- First ZONE block
"EL1 West Perim Pl Zn (G.W9)" = ZONE                
   TYPE             = CONDITIONED    
   ..    

 $---- Second SYSTEM block
"EL1 Sys1 (PSZ) (G.W4)" = SYSTEM              
   TYPE             = PSZ    
  FAN-SCHEDULE     = "S1 Sys1 (PSZ) Fan Sch"
   CONTROL-ZONE     = "EL1 South Perim Zn (G.S1)"
   ..    

 $---- Second ZONE block
"EL1 Core Pl Zn (G.C10)" = ZONE                
   TYPE             = CONDITIONED    
   ..    

由于我的知识有限,因此创建了以下正则表达式以仅匹配系统块:

^"(.*?)= SYSTEM(.*?)..    

但在正确匹配第一个系统块后,表达式将错误地匹配第二个区域和系统块:Mis-match screen shot

我想知道如何改善我的表达方式。

答案

你可以用这个正则表达式做到这一点:

^".*? = SYSTEM(?:(?!s*..)[sS])+

Demo

说明:我们利用tempered greedy token来断言SYSTEM块末端的两个点。并且[sS]作为修改后的.来匹配多行中的所有内容。

关于Notepad ++:确保关闭选项. matches newline,它将工作。

以上是关于如何使用正则表达式多行模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 python 多行

Python: 正则表达式匹配多行,实现多行匹配模式

正则表达式拆分模式多行

Python正则表达式,多行匹配模式..为啥这不起作用?

markdown 正则表达式模式片段

正则表达式