在多行单词之间寻找文本

时间:2019-05-30 14:54:59

标签: java regex regex-lookarounds

在下面的文本中,我试图识别该文本也属于哪个家庭成员。评论将在家庭成员之前进行。.因此,在下面的示例中,我仅应确定母亲..父亲没有评论

some stuf Father 
more stuff Mother

Comment: Deceased

搜索并尝试使用否定的环视效果后,我似乎仍然无法使其正常工作。例如,。

Father(?!Mother).*Comment:\s?(deceased|died)

此正则表达式不应找到匹配项。但是最终会匹配

Father 
more stuff Mother

Comment: deceased

如果我切换了“父亲”和“父亲”,则它正确匹配。但是由于注释不属于“父亲”,因此本例中不需要匹配

1 个答案:

答案 0 :(得分:1)

您必须扩展否定的前瞻(?!.*?Mother)来匹配任何字符0次以上,否则它将断言直接在右边的不是母亲。

在这种情况下,母亲不会紧随父亲之后,因此断言成功,并且.*Comment这部分将一直匹配,直到最后出现的Comment匹配为止。

您的模式可能如下:

Father(?!.*?Mother).*Comment:\s?(deceased|died)

Regex demo

也许您也可以使“评论”的点星法也不要贪心,以防止过度匹配:

.*?Comment