这是一个据说很简单的问题,但我似乎无法找到合适的解决方案。有一个在格式的字符串:

A:B=C;D:E=F;G:E=H;...

,而A,B和C是字母数字(和可能更低以及大写)。 A和B是长度1+的,C可以是空的。

我想我不得不使用沿的

线的东西
((?<A>.+):(?<B>.+)=(?<C>.*);)*

但我不明白如何使它在一个懒惰的方式相匹配。我也不能确定如何获得相应匹配的结果,所以我会很感激一些代码示例。

我会很高兴,如果你可以给我一个提示。

有帮助吗?

解决方案

您可以使用\w匹配字母数字字符,而不是.,它匹配的一切。然后,你可以尝试在同一时间捕捉到一个匹配:

(?<A>\w+):(?<B>\w+)=(?<C>\w*);

下面是一个小例子:

Regex regex = new Regex("(?<A>\\w+):(?<B>\\w+)=(?<C>\\w*);");
string test = "A:B=C;D:E=F;G:E=H";

// get all matches
MatchCollection mc = regex.Matches(test);

foreach (Match m in mc) { 
    Console.WriteLine("A = {0}", m.Groups["A"].Value);
    Console.WriteLine("B = {0}", m.Groups["B"].Value);
    Console.WriteLine("C = {0}", m.Groups["C"].Value);
}

注意:有几个工具可以让你进行实验,正则表达式,并提供某种帮助;我个人很喜欢快报 - 尝试一下,这将是对学习非常有用的。

其他提示

时的正则表达式的要求?由于串具有非常结构化的,那么,结构,很容易对它进行解析正则表达式,而不:

string input = "A:B=C;D:EF=G;E:H=;I:JK=L";
string[] elements = input.Split(new[] { ';' });
List<string[]> parts = new List<string[]>();
foreach (string element in elements)
{
    parts.Add(element.Split(new[] { ':', '=' }));
}
// result output
foreach (string[] list in parts)
{
    Console.WriteLine("{0}:{1}={2}", list[0], list[1], list[2]);
}

的输出将是:

A:B=C
D:EF=G
E:H=
I:JK=L
Regex r = new Regex("(?<A>\\w)+:(?<B>\\w)+=(?<C>\\w)*;");

在\ W将匹配字母数字和下划线,等价于[A-ZA-Z0-9 _]。

反斜杠转义串中,所以它成为\ \瓦特

在正则表达式捕获基团A,B,和C,和将匹配由分号分隔的C或整个组的0个或更多的元件。

您将有多个Match对象:

MatchCollection m = r.Matches(sampleInput);
// m[0] will contain A:B=C;
// m[1] will contain D:E=F;
// m[2] will contain G:E=H;
// ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top