C# 正则表达式-在值之前或之后查找值
我的值是[A].[B].[C].[D]和[X].[Y]我想写一个正则表达式,其中一个在[]中给我值,它在D之前(在上面的示例C中),另一个在[X]之后返回值(在上面的示例Y中) 我正在使用C#,.net4.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\]\.\[([^\]]*)\]这应该可以: (?无法使用(*),因为这样会抓取太多字
\[(.*?\]\.\[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);
}