问题描述
我需要一个与单词无关的正则表达式。例如,这些行应与标记的范围匹配,
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 post和this other one,但是被接受的答案并不能完全解决我的问题。使用\b(?=.*longword1)(?=.*longword2).*\b
会匹配整行而不是我显示的范围。
我知道,如果我根据单词列表检查句子,会容易得多。但是我当前的用例阻止了它的实现。我只能使用正则表达式。
这里有一些链接可以证明我的意思:
已执行:
- 使用替代项:https://regexr.com/5b6pv
- 使用子例程:https://regexr.com/5b6ss
错误:
- 使用积极的前瞻性(链接):https://regexr.com/5b6q2
有没有更简单的正则表达式来解决这个问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)