匹配短语如果它包含列表中的所有单词 - 正则表达式

时间:2017-05-28 02:36:21

标签: regex

我有这样的短语:

computer keyboard
computer keyboard black
computer keyboard black mouse

然后我有一个单词数组,但我只想在每个单词与数组中的条目匹配时返回短语。

这是一个示例数组:

["keyboard","computer","black"]

我想匹配'电脑键盘'和'电脑键盘黑',而不是'电脑键盘黑鼠',因为鼠标不存在于单词列表中。

这是我到目前为止所拥有的:

(?=.*?(keyboard|computer|black)).*

唯一的问题是,显然,这仍然与第3个短语匹配。这是否可以使用正则表达式?

1 个答案:

答案 0 :(得分:1)

尝试在多行m模式中使用^ ... $ ...

这意味着:

(?: ... )+ - 匹配必须是从行的开头到行的结尾

(?:keyboard|computer|black)(?: |$) - 重复一次或多次的小组

?: - 以空格或行尾结尾的三个单词之一

所有群组都是非捕获dplyr,因为您只需要一个完整的短语

演示:Haskeline.hs