我试图解析以下模式
(\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)
也许我不应该尝试使用纯正则表达式?
答案 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)]