正则表达式解析尽可能少

时间:2015-11-21 13:23:24

标签: .net regex

我试图解析以下模式

(\d+)\*\[(.+?)\]

这是我希望正确解析的字符串:

10*[1*[{0.1-0.9}(10)]]10*[1*[{0.2-0.3}(10)]]

这里应该有2个匹配,他们的组2是:

1*[{0.1-0.9}(10)] and
1*[{0.2-0.3}(10)]

不幸的是由于。+?比赛现在是:

1*[{0.1-0.9}(10)
1*[{0.2-0.3}(10)

他们都错过了结束[,但是?是需要的,否则我不能彼此相邻:

模式为(\d+)\*\[(.+)\]: 只有一个匹配的第2组是:

1*[{0.1-0.9}(10)]]10*[1*[{0.2-0.3}(10)]

有人可以指导我这个问题吗?也许我需要做某种预处理?纯正的正则表达将非常感激。

编辑1:

我会递归地使用这个正则表达式,这就是为什么我需要它来正确匹配内部和外部模式,不幸的是,贪婪和不情愿的匹配都与我的模式错误

编辑2:

我原来的问题很模糊,对不起。 这就是问题所在,这就是为什么我,我自己无法做正确的正则表达式字符串:

10*[1*[{0.1-0.9}(10)]]10*[1*[{0.2-0.3}(10)]]正确匹配到1*[{0.1-0.9}(10)]的模式 并且1*[{0.2-0.3}(10)]也应该能够匹配匹配本身: 例如:1*[{0.1-0.9}(10)]1{0.1-0.9}(10)

也许我不应该尝试使用纯正则表达式?

1 个答案:

答案 0 :(得分:2)

如果您只想匹配括号的内部部分,则可以将贪婪的.+?替换为与方括号之外的所有内容匹配的贪婪[^\[\]]+

var input = "10*[1*[{0.1-0.9}(10)]]10*[1*[{0.2-0.3}(10)]]";
var pattern = @"(\d+)\*\[([^\[\]]+)\]";
foreach (Match m in Regex.Matches(input, pattern)) {
    Console.WriteLine(m.Value);
}

此代码打印

1*[{0.1-0.9}(10)]
1*[{0.2-0.3}(10)]

Demo.