2

我无法将几个不同的正则表达式放在一起来做我需要的事情。说我有文字:

这是第一句。这是第二句!这是三个。这是四个。百事可乐中间句在这里是五个。给你六个?这是七个!第八句来了。九是最后一个。

我想把里面有“百事可乐”的句子和前三个和后三个抽出来:

这是第二句!这是三个。这是四个。百事可乐中间句在这里是五个。给你六个?这是七个!第八句来了。

这可以拉出百事可乐的句子:

(?i)((?=[^.\n]*\bpepsi\b)[^.\n]+\.?)

这样就可以抽出pepsi句子和下面三个句子:

(?i)(?m)(?s)((((?=[^.?!\n]*\bpepsi\b)[^.\n]+[.?!]?){1})((?:\\s[a-z]\\.(?:[a-z]\\.)?|.)+?[.?!]+){3})

但我不知道如何拔出前三个。我可以拉出前三个:

(?i)(?m)(?s)((?:\\s[a-z]\\.(?:[a-z]\\.)?|.)+?[.?!]+){3}

但是当我尝试做百事可乐句子和前三个时,就是做不到......

而且我开始怀疑正则表达式是否是一个不错的选择,因为 html 可能会在句子中混合。我认为这些正则表达式会没问题,但我不确定。

4

1 回答 1

0

这可能会做你想要的(正则表达式示例:http ://regexr.com?31mm4 )

^(?:.*?[.?!])?(((?:.*?[.?!]){3})(.*?pepsi.*?[.?!])((.*?[.?!]){3}))(.*?)$

它将七个句子(包含百事可乐的句子两边各三个)捕获为 1 美元,将前面的三个句子捕获为 2 美元,将目标捕获为 3 美元,将后面的三个捕获为 4 美元

使用您的样本数据:

($1)Whole capture:  This is sentence two! This is three. This is four. And pepsi middle sentence is here which is five. Here you go six? And this is seven here! Sentence eight is here.
($2)Three before:  This is sentence two! This is three. This is four. 
($3)Target:  And pepsi middle sentence is here which is five. 
($4)Three after:  Here you go six? And this is seven here! Sentence eight is here. 

当然,根据您使用的语言,可能有一种更清洁的方法

于 2012-07-31T21:26:26.803 回答