从一组具有相同起始和结束的所有段落的段落中提取包含特定字符串的段落

Extracting paragraphs containing a particular string from a group of paragraph having all paragraphs with same start and end

本文关键字:段落 结束 段落中 字符串 包含特 提取 一组      更新时间:2023-09-26

我需要从一组具有相同起始和结束的段落中提取包含特定字符串的段落

例如:在下面的文本中,所有段落的第一行以"Thread"开头,最后一行以"Breadcrumb"开头,现在我只想提取那些包含"string_to_be_searched"的段落

 Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data
  Thread 1398 (Thread name)
    data...
    string_to_be_searched
    Breadcrumb: some alpha numeric data

  Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data
 Thread 1398 (Thread name)
    data...
    string_to_be_searched
    Breadcrumb: some alpha numeric data
 Thread 1398 (Thread name)
    data...
    Breadcrumb: some alpha numeric data

我尝试过使用正则表达式,但当我在没有g选项的情况下尝试时,它会给我前两个线程,而当我使用g时,它只给我前4个线程,相反,它应该只给我第二个和第三个线程。

var re = /(Thread['s'S]*?sys_mlock['s'S]*?Bread.*)/m; 

问题演示:https://regex101.com/r/nR3qG9/2

您可以使用这个基于前瞻性的正则表达式:

/('bThread ((?!'bBread)['s'S])*string_to_be_searched((?!'bBread)['s'S])*Bread.*)/g

更新Regex Demo

((?!'bBread)['s'S])*是这里的关键,它意味着匹配0个或多个后面没有另一个Bread模式(您的结束块)的字符(包括换行符)。