正则表达式 - 在值之前或之后查找值
问题描述:
我的值是[A]。[B]。[C]。[D]和[X]。[Y]我想写一个正则表达式,我在D之前的[]中的值(在上面的例子C中)和一个在[X]之后返回值的正则表达式(对于上面的例子Y)。正则表达式 - 在值之前或之后查找值
我正在使用C#,.net4。
答
\[(.*?)\]\.\[D\]
- 前D.获取组1 \[X\]\.\[(.*?)\]
- X.获取组1
答
后第一:\ [([^ \ ]])*)\] \。\ [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);
}
不能使用(。*),因为那会占用太多,需要排除']'。 – 2012-02-02 21:14:26
这是贪婪的情况。 。*?是懒惰的,会抓住,直到找到第一个字符。 – shift66 2012-02-02 21:16:52
http://msdn.microsoft.com/en-us/library/3206d374.aspx#Greedy – shift66 2012-02-02 21:19:33