【问题标题】:Regex expression matching block of lines正则表达式匹配行块
【发布时间】:2017-11-29 01:53:58
【问题描述】:

我有这种文件:

Analysis of its root cause:
Blablablablabla
blabablabkjhjk
kjbsqbdqbds

Details of the fix
blablabla

Analysis of its root cause:
fddsfsdfsdfdsfs
blnskdbbqbbb
xxxxggggggg

Details of the fix
blablabla

对其根本原因的分析在文件中重复 x 次。我想获得由“分析其根本原因”和“修复细节”分隔的文本块。

非常感谢您的帮助。

【问题讨论】:

  • 我试图编辑我的帖子说你好,但它不起作用,所以你好:)
  • 你的正则表达式是什么风格?

标签: regex


【解决方案1】:

我很确定有更好的方法来做到这一点,但这是我能做到的:

/(?(?<=Analysis of its root cause:\n)((.*\n)*)(?=Details of the fix\n))/gU

我正在使用积极的前瞻和后瞻,以及以下修饰符:

g - global - 第一场比赛后不返回

u - Ungreedy - 使量词变得懒惰

在线试用:https://regex101.com/r/xpz7pg/2

【讨论】:

    【解决方案2】:

    不是正则表达式答案,而是使用 perl

    将你的行放到一个文件中。

     perl -e '$/="Analysis of its root cause:"; #Sets the record delimiter 
    
          while(<>){ #Iterates over the file, record by record
    
          chomp; #Removes the delimiter
    
          if ($_ =~ /\n(.*?)\nDetails of the fix\n(.*)\n/s){ #Matches strings between Details of the fix. . is allowed to match newline
    
          print "ONE:$1TWO:$2"} # $1 is the analysis, $2 is the details
          }'
          file.txt
    

    输出

    ONE:Blablablablabla
    blabablabkjhjk
    kjbsqbdqbds
    TWO:blablabla
    ONE:fddsfsdfsdfdsfs
    blnskdbbqbbb
    xxxxggggggg
    TWO:blablabla
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2016-02-16
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多