正则表达式拉出一个句子和前3个句子和接下来的三个句子

时间:2012-07-31 21:09:13

标签: java regex

我无法将一些不同的正则表达式放在一起以完成我的需要。说我有文字:

  这是第1句。这是第二句话!这是三个。这是四个。和百事可乐中间句在这里是五。你去六点?这是七点!第八句就在这里。九是最后一次。

我想用' pepsi'在它和前三个和以下三个:

  这是第二句话!这是三个。这是四个。和百事可乐中间句在这里是五。你去六点?这是七点!第八句就在这里。

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

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

这可以取出百事可乐句和以下三句话:

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

但我无法弄清楚如何取出前三个。我可以拿出前三个:

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

但是当我尝试做pepsi句子和前三个句子时,就不能这样做......

我开始怀疑正则表达式是否是一个很好的选择,因为html可以在句子中混合使用。我认为这些正则表达式没问题,但我不确定。

1 个答案:

答案 0 :(得分:0)

这可能会做你想要的(regexr例如: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. 

当然,根据您使用的语言

,可能会采用更简洁的方法