C# 正则表达式匹配什么不匹配

C# 正则表达式匹配什么不匹配,c#,.net,regex,pattern-matching,C#,.net,Regex,Pattern Matching,换句话说,我会将问题描述为“匹配A或B,匹配foo,然后匹配之前不匹配的A或B” 我可以使用以下正则表达式执行此操作: AfooB|BfooA 我想知道有没有更有效的方法?我知道如何使用“\”和组号引用捕获的组。在本例中,我希望应用类似于“不是捕获组中匹配的选项”(并且仍然被限制为仅匹配该组的其他可能匹配项) 我之所以要寻找比简单的“AfooB | BfooA”更有效的东西,是因为在我的情况下“foo”是一个非常长的模式,如果可能的话,我更愿意减少重复。在匹配第二个a或B时,可以使用带反向引用

换句话说,我会将问题描述为“匹配
A
B
,匹配
foo
,然后匹配之前不匹配的
A
B

我可以使用以下正则表达式执行此操作:

AfooB|BfooA
我想知道有没有更有效的方法?我知道如何使用
“\”
和组号引用捕获的组。在本例中,我希望应用类似于“不是捕获组中匹配的选项”(并且仍然被限制为仅匹配该组的其他可能匹配项)


我之所以要寻找比简单的
“AfooB | BfooA”
更有效的东西,是因为在我的情况下
“foo”
是一个非常长的模式,如果可能的话,我更愿意减少重复。

在匹配第二个
a
B
时,可以使用带反向引用限制的负向前看:

(A|B)foo(?!\1)(A|B)
基本上,
(A | B)
匹配并将值捕获到组1中,然后
foo
匹配
foo
(?!\1)
确保下面的文本与捕获到第一组中的文本不同,然后它只能与
(A | B)
匹配相反的值


注意:如果
A
B
是单个字符,请使用字符类:
([AB])foo(?!\1)([AB])

如果可以更好地描述标题,请将其更改为帮助他人:)效果很好!我会在几分钟内接受答案,如果允许的话:)