匹配两个或多个单词之间的字符串,无论顺序如何

问题描述

我需要一个与单词无关的正则表达式。例如,这些行应与标记的范围匹配,

A longword1 B longword2 C
  ^-------------------^

A longword2 B longword1 C
  ^-------------------^

这些不应该:

A longword1 B longword1 C
A longword2 B longword2 C
A longword1 B
A longword2 C

(A,B,C是填充符,它们基本上可以是任何文本)

可以仅使用替代,例如:\b((longword1).*?(longword2)|(longword2).*?(longword2))\b。但是正则表达式将阶乘增长,即三个词需要3!备用。也可以使用子例程,例如\b((?'A'longword1).*?(?'B'longword2')|(?P>B).*?(?P>A))\b。尽管简短,但我仍然需要包括其所有排列。

现在,我已经读过this postthis other one,但是被接受的答案并不能完全解决我的问题。使用\b(?=.*longword1)(?=.*longword2).*\b会匹配整行而不是我显示的范围。

我知道,如果我根据单词列表检查句子,会容易得多。但是我当前的用例阻止了它的实现。我只能使用正则表达式。

这里有一些链接可以证明我的意思:

已执行

错误:

有没有更简单的正则表达式来解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)