正则表达式包含一组单词的文本部分

时间:2018-04-25 14:47:15

标签: regex

我有一个包含几段的大文字。我想搜索包含一组单词的文本,而不是任何顺序,例如{“word3”,“word2”,“word1”}。需要返回文本的部分,可以跨越多个句子或段落。 请问这是什么正则表达式?

4 个答案:

答案 0 :(得分:0)

你需要有办法宣告这个"部分的文字"开始和结束。

我会假设你的部分停在一个换行符(\n)。

类似的东西:

(\n?).+(word1|word2|word3).+(\n|\.)

可以使它工作。这将返回整个段落(假设每个段落由\n与下一段隔开。

答案 1 :(得分:0)

lookaheads可以用来确保多种条件,一般形式将是

(?=.*word1.*$)(?=.*word2.*$)(?=.*word3.*$).*$

其中$可以通过截面的末尾来改变。

可以使用字边界来避免子字匹配,如果s可能与换行符匹配,也可以使用.切换。

(?=.*\bword1\b.*$)(?=.*\bword2\b.*$)(?=.*\bword3\b.*$).*$

答案 2 :(得分:0)

我同意mpliax,你必须有办法划分这些部分,这是一种定义段落或句子的方法。

假设您的段落由换行符分隔,并且我们正在寻找“grep”,“contains”和“text”,您可以使用match that paragraph的一系列前瞻:

([^\n]+(?=grep))([^\n]+(?=text))([^\n]+(?=contains))[^\n]+

或者这个稍微不同的模式,假设一个句子必须以句号,问号或感叹号结尾(一个错误的假设?),并尝试match just the sentence

([^\.?!]+(?=grep))([^\.?!]+(?=text))([^\.?!]+(?=contains))[^\.?!]+

这两种模式都遵循这种结构:([NON-delimiter]+(?=keyword))前瞻,尽可能多地一个接一个,以便我们知道在下一个分隔符发生之前我们可以“看到”我们的关键字。然后我们将整个段落与最后一个令牌[NON-delimiter]+匹配。

答案 3 :(得分:0)

如果您对这组字词进行了ignore the order,我认为对于3个字的集合,有几个combinations,例如abc, acb, bca, bac, cab, cba

因此,似乎需要匹配3个单词组的可能组合

a(bc|cb)|b(ca|ac)|c(ab|ba)

Demo ,,,其中假设a表示word1b表示word2c表示word3 }。

当然,对于基本上伴随words的{​​{1}},white space也需要空格,所以基本上可能是这样,

regex