繁体   English   中英

C#如何使用正则表达式拆分(A:B = C)*?

[英]C# How to split (A:B=C)* using regex?

据说这是一个非常简单的问题,但我似乎找不到正确的解决方案。 有以下格式的字符串:

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

而A,B和C是字母数字(可以同时大小写)。 A和B的长度为1 +,C可以为空。

我认为我必须按照以下方式使用某些东西

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

但我看不出如何以一种懒惰的方式使其匹配。 我也不确定如何获取各个匹配项的结果,因此,我希望获得一些代码示例。

如果您能给我一个提示,我会很高兴。

正则表达式是必需的吗? 由于字符串具有非常结构化的结构,因此无需使用正则表达式就可以轻松解析它:

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

您可以使用\\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);
}

注意 :有几种工具可以让您试验正则表达式,并提供一些帮助。 我个人喜欢Expresso-试试看,它将对学习非常有用。

Regex r = new Regex("(?<A>\\w)+:(?<B>\\w)+=(?<C>\\w)*;");

\\ w将匹配字母数字和下划线,等效于[a-zA-Z0-9_]。

反斜杠在字符串中转义,因此变为\\ \\ w。

正则表达式捕获组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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM