.net 所需的是;“不匹配”;如果不是,则在3个可选正则表达式的序列中至少有1个字符匹配

.net 所需的是;“不匹配”;如果不是,则在3个可选正则表达式的序列中至少有1个字符匹配,.net,regex,windows,.net,Regex,Windows,我有一个相当长的正则表达式,由3个部分组成,所有部分都是可选的,但有一个先决条件,即它们中至少有一个字符必须匹配 为了简洁起见,我们把这3个长的部分称为(A)、(B)和(C) 目前,它们的编码方式如下: (A)?(B)?(C)? 当然,这并不强制执行先决条件 我知道,我能做到 ((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C)) 在每个或分支机构中,必须有一个零件 但由于这些表达确实很冗长,我最终会陷入一片混乱 是否有某种限定符直接在((a)-(B)-(C))上

我有一个相当长的正则表达式,由3个部分组成,所有部分都是可选的,但有一个先决条件,即它们中至少有一个字符必须匹配

为了简洁起见,我们把这3个长的部分称为(A)、(B)和(C)

目前,它们的编码方式如下:

(A)?(B)?(C)?
当然,这并不强制执行先决条件

我知道,我能做到

((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C))
在每个
分支机构中,必须有一个零件

但由于这些表达确实很冗长,我最终会陷入一片混乱


是否有某种限定符直接在
((a)-(B)-(C))
上强制执行该限定符(即,如果不匹配至少1个字符,则不匹配)

您可以使用前瞻检查至少一个节的存在

(?=A|B|C)(A)?(B)?(C)?
仅当下一个序列是
A
B
C
时,此项才匹配。在任何其他情况下(其中
(A)-(B)-(C)
将匹配空字符串),由于向前看,将不存在匹配

这有一个缺点,就是你的序列是经过两次检查的序列,但我真的不知道如何解决这个问题。

+1谢谢你的尝试:)(序列前后也有一些事情发生,这可能会使前瞻变得复杂…)