2012-07-23 57 views
1

我有一个像test{0:##}test2{Order:C}test3文本。我需要使用正则表达式,并找到文本testtest2test3这不是{...}内。如何找到不包含内内的文本括号

对于花括号内的文字{0:##}我用

@"{0:(.*?)}" 

但是,试图对文本不花括号内,面临一些困难。

回答

1

代替括号以外一切匹配(乔伊所建议)时,它可能会更容易通过,只有匹配的括号表达式将字符串分割成一个阵列,的。

result = Regex.Split(teststring, "\{[^}]*\}"); 
2

如果没有嵌套的大括号,你可以使用类似以下内容:

(?<=^|})[^{]+(?={|$) 

这将使用回顾后和前瞻找到嵌入}...{片段或通过在一个结束的字符串的开始或结束分隔。

快速PowerShell的测试:

PS> [regex]::Matches('test{0:##}test2{Order:C}test3', '(?<=^|})[^{}]+(?={|$)') | select Value 

Value 
----- 
test 
test2 
test3 
0

如果文本始终是相同的格式你为什么不使用Split功能?

相关问题