从查询字符串中提取变量

时间:2013-08-26 12:24:55

标签: c# regex text-parsing

我需要解析以下字符串

/MyData.csv(MemberCount.sum,Production.sum[Salesperson="James Almond","Area="Europe "Area 1" (Germany)",Area="North America",Area="North America [Level A]"])

第一部分很简单,但括号([])中的条款让我有点头疼,因为它可以包含双引号,如示例所示。 (注意括号内的内容可以动态更改)

在解析字符串的最后一部分时,我希望得到以下输出:

销售人员     詹姆斯杏仁     区域     欧洲“1区”(德国)     区域     北美     区域     北美[A级]

我一直在使用正则表达式,但似乎无法做到正确。希望有人有魔力!

2 个答案:

答案 0 :(得分:1)

你可以使用' true'关闭双引号后跟逗号或结束方括号:

Area="(?<Area>.*?)"(?=\]|,)

regex101 demo

答案 1 :(得分:0)

您可以尝试Balancing Group Definitions

string pattern = @"^[^\[\]]*" +
                @"(" +
                @"((?'Open'\[)[^\[\]]*)+" +
                @"((?'Close-Open'\])[^\[\]]*)+" +
                @")*" +
                @"(?(Open)(?!))$";

var results =
    Regex.Match(input, pattern)
    .Groups["Close"].Value
    .Split(new char[] { '=', ',' });

输出:

Salesperson
"James Almond"
Area
"Europe "Area 1" (Germany)"
Area
"North America"
Area
"North America [Level A]"