正则表达式'或'运算符避免重复

Ton*_*Nam 9 .net c# regex

如何or在不允许重复的情况下使用操作符?换句话说正则表达式:

(word1|word2|word3)+
Run Code Online (Sandbox Code Playgroud)

会匹配, word1word2但也会匹配word1word1我不想要的,因为word1正在重复.我该如何避免重复?

总之,我希望以下主题匹配:

word1word2word3
word1
word2
word3word2
Run Code Online (Sandbox Code Playgroud)

注意它们都匹配,因为没有重复.我希望以下主题失败:

word1word2word1
word2word2
word3word1word2word2
Run Code Online (Sandbox Code Playgroud)

编辑

感谢@Mark 我知道:

(?xi)

(?:  
        (?<A>word1|word2)(?!  .*  \k<A> )      # match for word1 or word2 but make sure that if you capture it it does not follow what it was just captured
    |   (?<B>word3|word4)(?!  .*  \k<B> )
)+
Run Code Online (Sandbox Code Playgroud)

因为我有兴趣看看是否在A组或B组中捕获了某些东西.

Mar*_*ers 7

您可以使用负向前瞻:

^(?:word1(?!.*word1)|word2(?!.*word2)|word3(?!.*word3))+$
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:rubular

  • 在某些情况下这可能会有问题,例如,如果单词1和2是"地狱"和"你好". (2认同)