正则表达式:在两个字符串之间查找固定数量的单词

3

我有以下字符串:

    String phrase = "higher than <> expected";

<>代表不超过5个单词。

我的正则表达式返回无限数量的匹配项,这并不有用,因为我不想要超过5个匹配项。

String regex = "(?i)higher than(.*?)expected(?-i)";

1
你在使用哪个应用程序/编程语言的实现? - AbsoluteƵERØ
你想要在“higher than”和“expected”之间长度为5的所有单词吗?比如说:“higher than foooooo bar expected”。它应该只返回“bar”,因为“foooooo”的长度超过了5。 - NeverHopeless
@AbsoluteƵERØ 我正在使用Java。 - PhDeveloper
@NeverHopeless 单词的长度并不重要。在“高于”和“预期”的单词之间的单词数不应超过5个。 - PhDeveloper
4个回答

4

1

在这里,“Look behind”和“Look around”都是合适的,但作为替代方案,您还可以使用非捕获组来帮助实现。

您还应该考虑在“higher than”之后和“expected”之前有多个前导和尾随空格。

(?:higher than\s*)((?:\w+\s*){0,5})(?:\s*expected)

没有考虑到前导、尾随和空格,感谢指出。 - PhDeveloper

1

您可以使用正则表达式匹配出现次数,但可能需要使用扩展的正则表达式。

\d{1-3} 可以匹配 1 到 3 个数字。

您还可以使用非贪婪匹配,因为您当前的实现问题是 (.*?) 匹配了所有内容。例如,<.+?> 将匹配一个 XML 标签。在 + 后面加上 ? 使其变成懒惰匹配。

这里有一个很好的 正则表达式参考网站


0
如果单词也可能以相反的顺序出现,我们还需要指定相反的模式:
\b(?:(?:higher than)\W+(?:\w+\W+){0,5}?(?:expected)|(?:expected)\W+(?:\w+\W+){0,5}?(?:higher than))\b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接