C# 包装在{}中的正则表达式

C# 包装在{}中的正则表达式,c#,regex,C#,Regex,我有点卡住了,不知道是否有人可以帮忙,我正在尝试使用正则表达式来查找值并检查Function2在以下字符串中的{}之间,请参见下面的内容: AA \\*Funtion1 {5 + \\*Funtion2 {3} {4} + 6 } BB CC \\*Funtion2 {3} {\\*Funtion2 {3} {4} + 4} DD \\*Funtion2 {3} {4} EE AA \\*Funtion1 { \\*Funtion2 {3} {4} + \\*Funtion2 {3} {4

我有点卡住了,不知道是否有人可以帮忙,我正在尝试使用正则表达式来查找值并检查Function2在以下字符串中的{}之间,请参见下面的内容:

AA \\*Funtion1 {5 + \\*Funtion2 {3} {4} + 6 } BB 

CC \\*Funtion2 {3} {\\*Funtion2 {3} {4} + 4} DD \\*Funtion2 {3} {4} EE

AA \\*Funtion1 { \\*Funtion2 {3} {4} + \\*Funtion2 {3} {4} + 6 } BB

应该返回2个匹配,但继续得到3个。

尝试使用lookback

(?<=\{[^}]*)Funtion2
第二个“Function2”将被跳过,因为它和开头的“{”之间有一个“}”


你可以使用一个平衡的正则表达式,但是老实说,这看起来像是对我的解析。也许你应该考虑编写一个解析器,而不是太依赖于正则表达式。

在括号内是否有括号,如<代码> { +{{}}} /代码>?是否有反斜杠不是函数名的一部分(例如,代码> \**FUNTIO2)?如果两个问题的答案都是否定的,您应该能够在不诉诸平衡小组的情况下管理这一问题。例如:

Regex r = new Regex(@"\{[^{}\\]*\\\\\*Funtion2(?:[^{}\\]+\{[^{}\\]+\})*[^{}\\]*\}");
foreach (Match m in r.Matches(source)
{
  Console.WriteLine(m.Value);
}
结果:

{5+\\*功能2{3}{4}+6}
{\\*功能2{3}{4}+4}
分解正则表达式,我们有:

\{#开口大括号
[^{}\\]*#函数名前面的可选内容
\\\\#两个反斜杠
\*#星号
功能2和名称
(?:#在循环中。。。
[^{}\\]+#下一个大括号前面的内容
\{[^{}\\]+\}一对平衡的大括号,中间有非大括号
)*#循环零次或多次
[^{}\\]*#右大括号前面的可选内容
\}#关闭支架

你能提供你当前使用的正则表达式,让我们看看你做错了什么吗?你确定它是“功能”而不是“功能”吗?@OndrejTucny很好,哈哈。嗨,电子人,谢谢你的回复。我已经查看了平衡正则表达式,可以提供一些建议。我有以下几行吗?(?@Chris,你应该把这些信息添加到问题中。这样你会对这个问题有更多的关注,而且它的位置实际上是不可读的。
Regex r = new Regex(@"\{[^{}\\]*\\\\\*Funtion2(?:[^{}\\]+\{[^{}\\]+\})*[^{}\\]*\}");
foreach (Match m in r.Matches(source)
{
  Console.WriteLine(m.Value);
}