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

时间:2017-06-24 06:17:54

标签: .net regex windows

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

为简洁起见,我们将这三个长节(A),(B)和(C)称为。

目前,它们以这种方式编码:

(A)?(B)?(C)?

当然不会强制执行先决条件。

我知道,我可以做到

((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C))

在每个Or分支中强制执行一部分。

但由于这些表达方式确实很长,我最终会陷入混乱。

是否有某种限定符可以直接在((A)?(B)?(C)?)强制执行(即如果不匹配,则不匹配)?

1 个答案:

答案 0 :(得分:2)

您可以使用前瞻来检查至少一个部分是否存在。

(?=A|B|C)(A)?(B)?(C)?

如果下一个序列为ABC,则仅匹配。在任何其他情况下((A)?(B)?(C)?匹配空字符串),由于前瞻而没有匹配。

这有缺点,你的序列是序列被检查两次 - 但我真的不知道如何。