正则表达式提取搜索词周围的片段

时间:2013-02-05 13:09:48

标签: regex

我们需要一个正则表达式来从我们正在搜索特定术语或短语的文本中选择句子。结果应该包含搜索词以及前一行和后一行。这里的行的定义可以是从空行到任何字符的任何内容。

例如,如果我们在下面的文本中搜索术语“沉积”(不区分大小写):

12           xxxxxxxxxx.           )
13   ______________________________)
14
15
16
17
18             VIDEOTAPE DEPOSITION OF JOHN
19                    FRIDAY, OCTOBER 30, 2009
20
21
22
23
24   PAGES 1 - 92

这应该会给我以下结果:

17
18             VIDEOTAPE DEPOSITION OF JOHN
19                    FRIDAY, OCTOBER 30, 2009

2 个答案:

答案 0 :(得分:0)

尝试这种模式:

[^\r\n]*?(?:\r|\n|\r\n)[^\r\n]*?\bDEPOSITION\b[^\r\n]*?(?:\r|\n|\r\n)[^\r\n]*?(?:\r|\n|\r\n)

每次用DEPOSITION替换您要查找的单词。为了使搜索大小写不敏感,您需要在您选择的正则表达式引擎中进行设置。

这是live demo

答案 1 :(得分:0)

如果您知道自己正在搜索的内容,可以使用以下内容:

(\n^.+?DEPOSITION.+?$\n.+?\n)

如果您只想匹配所有组,可以将特定术语替换为\ S(非空格字符),如下所示:

(\n^.+?\S.+?$\n.+?\n)

在这两种情况下,确保关闭“Dot Matches Newline”非常重要。在上面,\ n是换行符,。+?将匹配任何内容,直到后面的字符,^匹配行的开头,$匹配行的结尾。唯一的其他问题可能是正则表达式解释器,它有一个标志用于切换^和$以匹配文件的开头和结尾而不是一行。这应默认为关闭,但值得确保