我想使用正则表达式获取字符串的集合{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...
}
有什么建议么?
最佳答案
您可以使用否定环顾四周方法来仅使{...}
子字符串前面没有{
或紧随其后的}
:
(?<!{){[^{}]+}(?!})
请参见regex demo
(?<!{)
-如果当前位置之前有{
,则会在匹配失败后进行负向查找{
-文字{
[^{}]+
-除{
和}
以外的1个或多个符号}
-文字}
(?!})
-如果前一个}
后面有}
,则否定超前匹配失败。关于c# - 提取单个大括号内的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38738558/