我有一个单词列表 - "foo"
,"bar"
,"baz"
- 我想写一个正则表达式,它匹配至少包含2个字符串的字符串。例如,"foo baz"
应该匹配,而"ba foo z"
不应该匹配。
明显的解决方案"(foo|bar|baz).*(foo|bar|baz)"
有效,但我发现它不能令人满意,因为它列出了两次这两个词。如果我有25个单词而不是3个单词怎么办?如果我要查找包含至少4个给定单词而不是2个单词的字符串怎么办?
答案 0 :(得分:4)
这听起来并不像是在寻找确切的单词,所以驴的解决方案可能不是你想要的
((foo|bar|baz).*?){2}
它会在文本中搜索任何字符串,然后搜索任何字符,直到再次找到其中一个可选字符串,并且由于懒惰的任何字符部分都将通过匹配任何内容来完成,匹配就完成了。
如果您希望它匹配多行,请务必打开全部点,或使用\ s \ S而不是点。
答案 1 :(得分:0)
我认为这个解决方案应该有效:
"(foo|bar|baz).*\s+\1(\s+|$)"
\s
表示空格字符应该确保您找到确切的单词而不仅仅是前缀。例如,"foo ... fooo"
无法识别。