我应该使用什么方法在字符串中搜索多个单词?我希望逻辑运算是AND,以便所有单词都出现在字符串中的某个位置。我有一些无意义的段落和一个普通英语段落,我想通过指定一些常见词汇(如“the”和“and”)来缩小范围,但是我希望匹配我指定的所有单词。
正则表达式支持“lookaround”条件,允许您在字符串中搜索一个术语,然后忘记结果的位置。这将允许在任意顺序下搜索一组单词的字符串。
此功能的正则表达式为:
^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b)
\b
表示单词边界,?=
是环视修饰符。
如果你想要搜索一个可变数量的单词,你需要使用循环构建这个正则表达式字符串 - 只需将每个单词用环视语法包装并附加到表达式中即可。
AND
作为连接符
^(?=.*?\b(?:word1)\b)(?=.*?\b(?:word2)\b)(?=.*?\b(?:word3)\b)
OR
作为替代条件
^(?=.*?\b(?:word1|word2|word3)\b
^(?=.*?\b(?:word1)\b)|^(?=.*?\b(?:word2)\b)|^(?=.*?\b(?:word3)\b)
首先,我不确定您想要返回什么......整个句子?还是在您给出的两个单词之间的单词?
类似于:
\b(word1|word2)\b(\w+\b)*(word1|word2)\b(\w+\b)*\.
\b
是你语言中的单词边界)会匹配包含这两个单词或其中一个单词的完整句子。my @paragraphs = split(/\n/,$text);
for my $p (@paragraphs) {
if ($p =~ m/\bthe\b|\band\b|\ban\b|\bin\b|\bon\b|\bthat\b|\bis\b|\bare\b|th|sh|ough|augh|ing\b|tion\b|ed\b|age\b|’s\b|’ve\b|n’t\b|’d\b/) {
print "Probable english\n$p\n";
}
}
(?=.*\bword\b)
。 - Tamlyn