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

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

问题描述:

我的值是[A]。[B]。[C]。[D]和[X]。[Y]我想写一个正则表达式,我在D之前的[]中的值(在上面的例子C中)和一个在[X]之后返回值的正则表达式(对于上面的例子Y)。正则表达式 - 在值之前或之后查找值

我正在使用C#,.net4。

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

+0

不能使用(。*),因为那会占用太多,需要排除']'。 – 2012-02-02 21:14:26

+0

这是贪婪的情况。 。*?是懒惰的,会抓住,直到找到第一个字符。 – shift66 2012-02-02 21:16:52

+0

http://msdn.microsoft.com/en-us/library/3206d374.aspx#Greedy – shift66 2012-02-02 21:19:33

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

\[X\]\.\[([^\]])\] 

consider reading up on regex

后第一:\ [([^ \ ]])*)\] \。\ [D \]

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

这应该工作:

(?<=\[)\w(?=\]\.\[D\])

(?<=\[X\]\.\[)\w(?=\])

[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); 
    }