C# 正则表达式-在值之前或之后查找值

C# 正则表达式-在值之前或之后查找值,c#,regex,C#,Regex,我的值是[A].[B].[C].[D]和[X].[Y]我想写一个正则表达式,其中一个在[]中给我值,它在D之前(在上面的示例C中),另一个在[X]之后返回值(在上面的示例Y中) 我正在使用C#,.net4.\[(.*?\]\.\[D\]-在D之前。获取组1 \[X\]\.\[(.*)\]-在X之后。获取组1 \[([^\]])\]\.\[C\] 及 首先:\[([^\]])*)\]\.\[D\] 第二:\[X\]\.\[([^\]]*)\]这应该可以: (?无法使用(*),因为这样会抓取太多字

我的值是[A].[B].[C].[D]和[X].[Y]我想写一个正则表达式,其中一个在[]中给我值,它在D之前(在上面的示例C中),另一个在[X]之后返回值(在上面的示例Y中)

我正在使用C#,.net4.

\[(.*?\]\.\[D\]
-在D之前。获取组1
\[X\]\.\[(.*)\]
-在X之后。获取组1

\[([^\]])\]\.\[C\]

首先:\[([^\]])*)\]\.\[D\]

第二:\[X\]\.\[([^\]]*)\]

这应该可以:


(?无法使用(*),因为这样会抓取太多字符,需要排除']'。这是贪婪的情况。.*?是懒惰的,会抓取,直到找到第一个]字符。
\[X\]\.\[([^\]])\]
    [Test]
    public void TestC()
    {
        string input = "[A].[B].[C].[D].[X].[Y]";
        string actual = Regex.Match(input, @"(?<=\[)\w(?=\]\.\[D\])").Value;
        string expected = "C";
        Assert.AreEqual(expected, actual);
    }

    [Test]
    public void TestY()
    {
        string input = "[A].[B].[C].[D].[X].[Y]";
        string actual = Regex.Match(input, @"(?<=\[X\]\.\[)\w(?=\])").Value;
        string expected = "Y";
        Assert.AreEqual(expected, actual);
    }