在单个花括号内提取值

时间:2016-08-03 08:38:50

标签: c# regex

我想使用 正则表达式 获取字符串 {value} 的集合。

例如:

  

lorem ipsum {field1} lorem ipsum {field2} lorem ipsum field1 lorem ipsum field2 {{field3}}

我会得到:{field1} and {field2}

我试试这个:

string pattern =@"\[(?>[^\{\}]+)*\]";

MatchCollection matches = Regex.Matches(text, pattern);
for (int ctr = 0; ctr < matches.Count; ctr++)
{
    string field = matches[ctr].Value;
    // ... ommitted...
}

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您可以使用否定外观来仅获取前面没有{...}的{​​{1}}子字符串或者{后面的}字符串:

(?<!{){[^{}]+}(?!})

请参阅regex demo

enter image description here

  • (?<!{) - 如果在当前位置之前有{,则会导致比赛失败但
  • { - 文字{
  • [^{}]+ - {}
  • 以外的1个或多个符号
  • } - 文字}
  • (?!}) - 如果前一个}之后有},则表示匹配失败。